This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC34:运行时采样率变化问题

Guru**** 2386610 points
Other Parts Discussed in Thread: TLV320AIC34
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1446965/tlv320aic34-runtime-sampling-rate-change-issue

器件型号:TLV320AIC34

工具与软件:

团队成员、您好!

 我们在 其中一个运行 Yocto Linux 的嵌入式器件中使用了 TLV320AIC34:编解码器。 现在、我们面临一个与运行时采样率变化相关的问题。

例如、 假设编解码器以48k 采样速率运行、那么我的应用此时需要尝试将时间错误配置为8k 采样速率。

就像在运行时那样、我们需要将编解码器配置为48k 到8k、反之亦然。 有可能吗?

我们已经尝试给软重置使用 reg no 0和 reg 1 ,但它不会发生.

目前编解码器以48K 采样率运行、我希望将其更改为8K I use

arecord -D HW:1、0 -c 1 -r 8000 -f S16_LE | aplay -D HW:1、0 -c 1 -r 8000 -f S16_LE

 

错误:不匹配的速率对称 SoC_PCM_PARAMS_MATXEMENT :8000

ASOC SoC_PCM_HW_params ()失败(-22)

读写错误

若要更改采样率、我们需要在该时间内重新启动器件。 但我们需要采样率频率的运行时更改。

是否有办法复位编解码器? 或者我们是否可以像这样更改运行时呢? 请引导我们

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否能够在系统中运行 I2C 命令? 可在运行时发送 I2C 命令。 如果只想在48k 和8k 之间变化、可使用页0寄存器2、将当前基准采样率除以6、以获得新的 ADC 或 DAC 采样率。  在记录为8k 之前、您可以将48k 除以6以获得8k 的新采样率。  

    如果这不起作用、请告诉我、我们可以尝试其他方法。

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    i2cset -y -f 2 0x1a 0x0 0x0 --> PAGE 0选择

    i2cset -y -f 2 0x1a 0x02 0xAA -->对应8k 采样率

    然后使用 i2cget、我们已经将其读回。是的、寄存器值发生了变化、但没有效果...

    然后尝试

    器件已经处于48K 采样率、在此之后、我们尝试更改为8k

    arecord -D HW:1、0 -c 1 -r 8000 -f S16_LE | aplay -D HW:1、0 -c 1 -r 8000 -f S16_LE

    RecordingWAVE 'tdin:

    有符号16位小端字节序速率8000Hz 立体声-->用于录制没有错误、但下一个当播放在管道中时、该时间错误

    播放波浪'stddin': tlv320aic3x-hifi:

    然后也有错误是从播放端... Aplay 仅指较早的采样率

    ASOC:不匹配的速率 SYSMmetry:xxx.SAI2:48000 - SoC_PCM_PARAMS_SYSTMmetry:8000

    带符号16位小端字节序速率 ::8000Hz streao

    tlv320aic3x-hifi:  ASOC : soc_pcm_params ()失败(-22)

    aplay : set _params:无法安装 HW params:

    访问:rw_interleaved

    格式:S16_LE

    子格式:标准

    SAMPLE_BITS:16

    FRAME_BITS: 32.

    频道:2.

    速率:8000

    Period_Time:67500

    PERIOD_SIZE:540

    period_bytes:7560

    tick_time:0

    看起来 aplay 尚未采用新的采样率8k 它仍然是48k

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我明天会向您介绍这方面的内容。 很抱歉耽误你的时间。

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    当您运行"aplay -L"时会出现什么情况? 这将列出您的输入和输出通道。 似乎与您的错误,驱动程序没有注册到您选择的硬件通道(HW 1,0),或者可能 ALSA 卡在计算机中的另一个进程上。  下面这个线程: https://bbs.archlinux.org/viewtopic.php?id=259785 他们发现,如果他们安装了 PulseAudio 和 PulseAudio-alsa 然后更新了他们的系统中的软件包,它工作了... 这或许会有所帮助? 您的问题看起来不像是编解码器本身的问题、而是 ALSA 设置的问题。 另一个问题可能是您尝试播放的音频文件不是8k 采样率的倍数。 请告诉我您在列出您的 ALSA 音频设备时找出了什么以及会发生什么情况。  

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它列出了... TLV 作为卡1

    ----------------------------------------------------------------------------------------------------------------------

    根@EVK:-# A 播放-L

    null

    丢弃所有样本(播放)或生成零样本(采集)

    电流

    PulseAudio Sound 服务器

    sysdefault:card=D30030000saisnd

    30030000.Sai-snd-dummy-dai soc、3000000.Sai-snd-dummy-dai soc snd-dai soc dummy-dai 0

    默认音频设备

    sysdefault:card-tlv320audio

    tlv320-音频、30020000.sa12-tlv320a1c3x-hifi tlv320a1c3x-hif-0

    默认音频设备

    根@EVK:-# a 播放-l

    *播放硬件设备列表**.

    卡0:D30030000saisnd [30000.SAI-SND-DUME-DAI soc)、设备0:3000000.SAI-SND-DUMY-DAI soc SND-DUME-DAI-0 [30000.SAL-SM soc

    子器件:1/1

    子器件#9:子器件#0

    卡1: tlv320audio [tlv320-AUDIO]、设备0:30020000.SAI2-tlv320a1c3x-htlv320a1c3x-hif-0 [30020000.sa12-tlv320a1c3x-hifi tlv3208.

    子器件:1/1

    子器件#9:子器件#0

    ------------------------------------------------------------------------------------------------------------------------

    如果我使用一个固定的单采样率48k 或8k、则根本没有问题。

    对于我的应用、有一个要求按需更改采样率的要求 运行时释放能量 8K 之间切换、反之亦然。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    谢谢您的参与。 我想知道如果您将 I2C 命令更改为8k 采样率、但在 aplay 命令中您将其保持在48k 会发生什么情况? 驱动程序似乎不 支持在运行时更改采样率。 因此、aplay 不会通知器件以不同的采样率运行、并且时钟可能不会按您的预期工作。 但是、如果 I2C 命令有效、那么编解码器预计时钟速度只比48K 慢6倍、但可能它仍然可以记录、但只能每6个样本获得一次。。。 您可能最终需要编辑文件、并且每6个样本中就有5个需要丢弃。 请告诉我您如何理解这一点。  

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、我不明白您的意思、是否可以在运行时进行更改? 但在 Ubuntu 上、如果我尝试相同的命令(无论任何编解码器如何)、它都可以无缝地在48k 到8k 之间工作、反之亦然。 没有此类错误...

    关于我已经尝试过的 I2C 命令、在之前的帖子中发布了相关内容

    i2cset -y -f 2 0x1a 0x0 0x0 --> PAGE 0选择

    i2cset -y -f 2 0x1a 0x02 0xAA -->对应8k 采样率

    使用 i2cget、我们已经读回了该值。 寄存器值正在更改、但没有影响...

    当之后器件的采样率已经@ 48K 时、如果我们尝试更改为8k

    arecord -D HW:1、0 -c 1 -r 8000 -f S16_LE | aplay -D HW:1、0 -c 1 -r 8000 -f S16_LE

    RecordingWAVE 'tdin:

    有符号16位小端字节序速率8000Hz 立体声-->用于录制没有错误、但下一个当播放在管道中时、该时间错误

    播放波浪'stddin': tlv320aic3x-hifi:

    然后也有错误是从播放端... Aplay 仅指较早的采样率

    ASOC:不匹配的速率 SYSMmetry:xxx.SAI2:48000 - SoC_PCM_PARAMS_SYSTMmetry:8000

    带符号16位小端字节序速率 ::8000Hz streao

    tlv320aic3x-hifi:  ASOC : soc_pcm_params ()失败(-22)

    aplay : set _params:无法安装 HW params:

    访问:rw_interleaved

    格式:S16_LE

    子格式:标准

    SAMPLE_BITS:16

    FRAME_BITS: 32.

    频道:2.

    速率:8000

    Period_Time:67500

    PERIOD_SIZE:540

    period_bytes:7560

    tick_time:0

    看起来 aplay 尚未采用新的采样率8k、 它仍是48k

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我发现 (此论坛帖子) 并发现您可以更改 pulse/daemon.conf 文件中使用的默认/备用采样率。 我能够在 Raspberry Pi Linux 系统上打开它、并看到了默认采样率和备用采样率、如果您只想在8k 和48k 之间进行更改、以及 PulseAudio 将使用的一些重采样方法、如"重采样方法"、"避免重采样"等 如果您没有安装 PulseAudio、则应安装它、这可能对重新采样问题有很大帮助。 您说您的 Yocto 系统有问题、但 Ubuntu 没有、对吧?  

    另外, 这篇文章 添加了 ffmpeg 作为重采样选项,这可能会帮助你。

    请告诉我您如何理解这一点。

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还有一点-我发现您的错误"不匹配的速率对称 SoC_PCM_PARAMS_MATRITY:8000"可能是因为有另一个具有不同采样速率的活动流在使用同一 DAI 的同时进行-您是否正确地关闭了之前48K 的音频回放? 您可能需要使用 snd_pcm_close()函数、 此处对此进行了详细介绍

    -mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    启动时、

    arecord -D hw:1、0 -c 1 -r 48000 -f S16_LE | aplay -D hw:1、0 -c 1 -r 48000 -f S16_LE -->播放无任何错误

    但是  

    然后我按 Ctrl+c 或 Ctrl+d ^中断信号就像这样出现了、这样我们就恢复了终端... 这不足以 首先在命令行上进行尝试吗?

    arecord -D HW:1、0 -c 1 -r 8000 -f S16_LE | aplay -D HW:1、0 -c 1 -r 8000 -f S16_LE

    -->这里给出了不匹配的速率对称性错误...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在运行任何其他命令之前、在引导时运行命令以实现8k 采样率是否存在问题? 您是否可以尝试使用 SND_PCM_CLOSE()?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    无论我们给出的采样率是多少、在启动时、编解码器就不会出现问题(48k 或8k)、因为编解码器会复位...

    问题是仅当@更改运行时间时。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Prasanna:

    编解码器可能不支持在运行时更改采样率。 您可以尝试 snd_pcm_close()吗?  如何编辑 pulse daemon.conf 文件(此处提供更多信息: https://linux.die.net/man/5/pulse-demon.conf)以使辅助音频采样率为8k?

    此致!
    MIR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    编辑 pulse-daemon.conf 不能解决问题

    默认采样率= 48000
    替代采样率= 8000

    同样的错误不匹配对称... 我不知道在 Yocto 中这个脉冲起任何作用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在更改采样率之前尝试运行 snd_pcm_close()? 同样、我不确定我们是否最终能够在没有复位的情况下使其正常工作... 您只需查看通过软件(而不是硬件)重置音频系统的方法、尝试解决这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    软复位通过 I2C

    i2cset -y -f 2 0x1a 0x0 0x0 --> PAGE 0选择

    i2cset -y -f 2 0x1a 0x02 0xAA -->对应8k 采样率

    已经提到了迪迪不工作。  

    SND_PCM_DRIVAN()

    SND_PCM_CLOSE()

    已尝试... 但没有变化...

    硬件复位 GPIO 提供给驱动程序、而用户空间不可用...  

    您接下来有什么建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我将在星期一对此进行详细介绍。 我不确定是否可以使用此器件解决此问题、但可能是您在嵌入式 Linux 器件论坛(或 Yocto 论坛?)中要求的那样。 它们可以在查找问题根源方面提供更多帮助。 它甚至可能涉及到驱动程序编辑、但我不确定。

    -mir