Linux学习第46天:Linux音频驱动试验:总有那么一首歌,会让你泪流满面。

news2024/12/24 3:21:14

Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长 


            大叔来之一个小村庄,上大学以后来到了省城济南。之前高中练习英语听力买过一个随声听,晚上练习听力,怕影响同学休息还买了一个耳机。 虽然听力没有大的提升,但是带上耳机睡觉是真的下觉啊。平时睡不着,一带上耳机,很快就睡着了。

        到了大学以后,城里的同学也有一个随身听,大牌子。连耳机都号称是银线,价格不菲。我处于好奇听了一下到底好在哪里。当把耳机插入耳朵,音乐响起。我顿时傻住了。那真真实实的环绕立体声把我惊呆了。原因耳机里面竟然可以听到这么立体真实好听的音乐。说是刘姥姥进了大观园一点儿不假,真的是见了世面了。

        说这么一个小故事,无非是忆苦思甜,也很碰巧今天学习音频。往昔的林林种种倾泻而来。个中的酸甜苦辣,不得不感叹时光荏苒、岁月如梭。

         本节笔记主要学习一下如何使能 WM8960 驱动,并且通过 WM8960 芯片来完成音乐播放与录音。

        本章的思维导图如下:

一、音频接口简介

1、为何需要音频编解码芯片?

        ADC和DAC

2、WM8960简介

        数字音频接口(I2S接口):

ADCDAT: ADC 数据输出引脚,采集到的音频数据转换为数字信号以后通过此引脚传输给
主控制器。
ADCLRC: ADC 数据对齐时钟,也就是帧时钟(LRCK),用于切换左右声道数据, 此信号
的频率就是采样率。此引脚可以配置为 GPIO 功能,配置为 GPIO 以后 ADC 就会使用 DACLRC
引脚作为帧时钟。
DACDAT: DAC 数据输入引脚,主控器通过此引脚将数字信号输入给 WM8960 的 DAC。
DACLRC: DAC 数据对齐时钟,功能和 ADCLRC 一样,都是帧时钟(LRCK),用于切换左
右声道数据,此信号的频率等于采样率。
BCLK: 位时钟,用于同步。
MCLK: 主时钟, WM8960 工作的时候还需要一路主时钟,此时钟由 I.MX6ULL 提供,
MCLK 频率等于采样率的 256 或 384 倍。

        I2C 接口就是用于配置 WM8960 的。


3、I2S总线接口

        I2S 接口需要 3 根信号线:

SCK: 串行时钟信号,也叫做位时钟(BCLK),音频数据的每一位数据都对应一个 SCK,立体声都是双声道的,因此 SCK=2×采样率×采样位数。比如采样率为 44.1KHz、 16 位的立体声音频,那么 SCK=2×44100×16=1411200Hz=1.4112MHz。
WS: 字段(声道)选择信号,也叫做 LRCK,也叫做帧时钟,用于切换左右声道数据, WS 为“ 1”表示正在传输左声道的数据, WS 为“ 0”表示正在传输右声道的数据。 WS 的频率等于采样率,比如采样率为 44.1KHz 的音频, WS=44.1KHz。
SD: 串行数据信号,也就是我们实际的音频数据,如果要同时实现放音和录音,那么就需要 2 根数据线,比如 WM8960 的 ADCDAT 和 DACDAT,就是分别用于录音和放音。不管音频数据是多少位的,数据的最高位都是最先传输的。数据的最高位总是出现在一帧开始后(LRCK变化)的第 2 个 SCK 脉冲处。
        另外,有时候为了使音频 CODEC 芯片与主控制器之间能够更好的同步,会引入另外一个叫做 MCLK 的信号,也叫做主时钟或系统时钟,一般是采样率的 256 倍或 384 倍。

一帧立体声音频时序图:
 

        数据格式根据 DATA 数据相对于 LRCK 和 SCLK 位置的不同,出现了 Left Justified(左对齐)和 Right Justified(右对齐)两种格式。

4、I.MX6ULL SAI简介

        I.MX6ULL 的 SAI 是一个全双工、支持帧同步的串行接口,支持 I2S、 AC97、 TDM 和音频
DSP。

二、硬件原理图分析

三、音频驱动使能

1、修改设备树

        I2C 用于配置 WM8960, SAI 接口用于音频数据传输。

1)、wm8960 i2c接口设备树

        “ i2c2”节点添加 wm8960 信息,两个重要的属性:

compatible:兼容属性,属性值要设置为“ wlf,wm8960”。

reg: 设置 WM8960 的 I2C 地址。

codec: wm8960@1a {
compatible = "wlf,wm8960";
reg = <0x1a>;
wlf,shared-lrclk;/*这是一个 bool 类型的可选属性,如果添加了此属性, WM8960 的 R24 寄存器
的 LRCM 位(bit2)就会置 1。当 LRCM 为 1 的时候只有当 ADC 和 DAC 全部关闭以后 ADCLRC
和 DACLRC 时钟才会关闭。*/
};
1 codec: wm8960@1a {
2 compatible = "wlf,wm8960";
3 reg = <0x1a>;
4 clocks = <&clks IMX6UL_CLK_SAI2>;//指定时钟源为SAI2
5 clock-names = "mclk";//指定时钟名为mclk
6 wlf,shared-lrclk;
7 };

2)、I.MX6ULL SAI音频接口设备树

        SAI2 接口的 pinctrl:

1 pinctrl_sai2: sai2grp {
2 fsl,pins = <
3 MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
4 MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
5 MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
6 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
7 MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
8 >;
9 };
10
11 pinctrl_sai2_hp_det_b: sai2_hp_det_grp {//耳机插入检测引脚
12 fsl,pins = <
13 MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
14 >;
15 };

3)、I.MX6ULL sound节点

1 sound {
2 compatible = "fsl,imx6ul-evk-wm8960",/*用于匹配相应的驱动文件*/
3 "fsl,imx-audio-wm8960";
4 model = "wm8960-audio";/*声卡名字*/
5 cpu-dai = <&sai2>;/*CPU DAI(Digital Audio Interface)句柄,这里是 sai2 这个节点。*/
6 audio-codec = <&codec>;/*音频解码芯片句柄,也就是 WM8960 芯片,这里为“ codec”这个节点。*/
7 asrc-controller = <&asrc>;/*异步采样频率转化器。*/
8 codec-master;
9 gpr = <&gpr 4 0x100000 0x100000>;
10 /*
11 * hp-det = <hp-det-pin hp-det-polarity>;
12 * hp-det-pin: JD1 JD2 or JD3
13 * hp-det-polarity = 0: hp detect high for headphone
14 * hp-det-polarity = 1: hp detect high for speaker
15 */
16 hp-det = <3 0>;/*耳机插入检测引脚设置,第一个参数为检测引脚, 3 表示 JD3 为检测引脚。第二个
参数设置检测电平,设置为 0 的时候, hp 检测到高电平表示耳机插入;设置为 1 的时候, hp 检
测到高电平表示是喇叭,也就是耳机拔出了。*/
17 /*hp-det-gpios = <&gpio5 4 0>;
18 mic-det-gpios = <&gpio5 4 0>;*/
19 audio-routing =/*音频器件一系列的连接设置,每个条目都是一对字符串,第一个字符串是
连接的 sink,第二个是连接的 source(源)。*/
20 "Headphone Jack", "HP_L",
21 "Headphone Jack", "HP_R",
22 "Ext Spk", "SPK_LP",
23 "Ext Spk", "SPK_LN",
24 "Ext Spk", "SPK_RP",
25 "Ext Spk", "SPK_RN",
26 "LINPUT2", "Mic Jack",
27 "LINPUT3", "Mic Jack",
28 "RINPUT1", "Main MIC",
29 "RINPUT2", "Main MIC",
30 "Mic Jack", "MICB",
31 "Main MIC", "MICB",
32 "CPU-Playback", "ASRC-Playback",
33 "Playback", "CPU-Playback",
34 "ASRC-Capture", "CPU-Capture",
35 "CPU-Capture", "Capture";
36 };

2、使能内核的WM8960驱动

        输入命令make menuconfig,进入图形化配置界面。

1)、取消ALSA模拟OSS API

路径如下:

-> Device Drivers
-> Sound card support (SOUND [=y])
-> Advanced Linux Sound Architecture (SND [=y])
-> <> OSS Mixer API //不选择
-> <> OSS PCM (digital audio) API //不选择
 

2)、使能I.MX6ULL的WM8960驱动

-> Device Drivers
-> Sound card support (SOUND [=y])
-> Advanced Linux Sound Architecture (SND [=y])
-> ALSA for SoC audio support (SND_SOC [=y])
-> SoC Audio for Freescale CPUs
-> <*> Asynchronous Sample Rate Converter (ASRC) module support //选中
-> <*> SoC Audio support for i.MX boards with wm8960 //选中


四、alsa-lib和alsa-utils移植

1、alsa-lib移植

        配置信息的路径必须是绝对路径。

        编译的时候必须是root用户。

2、alsa-utils移植        

        alsa-utils 是 ALSA 的一些小工具集合,用于测试声卡用。

        按照如下命令编译
alsa-utils:
cd alsa-utils-1.2.2/ //进入
./configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsautils --with-alsa-inc-prefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/include/ --with-alsaprefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
make //编译
sudo make install

       将 bin、 sbin 和 share 这三个目录中的所有文件分别拷贝到开发板根目录下的/bin、 /sbin 和/usr/share/alsa 目录下。

        打开开发板根文件系统中的/etc/profile 文件,在里面加入如下所示内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
ALSA_CONFIG_PATH 用于指定 alsa 的配置文件,这个配置文件是 alsa-lib 编译出来的。

五、声卡设置与测试

1、amixer使用方法

1)、查看帮助信息

amixer --help //查看 amixer 帮助信息

        amixer 软件命令分为两组, scontrols、 scontents、 sset 和 sget 为一一组。 controls、 contents、 cset 和 cget 为另一组。这两组的基本功能都是一样的,只不过“ s”开头的是 simple(简单)组,这一组命令是简化版。

2)、查看设置项

amixer scontrols //查看所有设置项

controls 对应的设置项,输入如下命令:

amixer controls //查看所有设置项

        只关注一些最常用的设置即可,比如设置耳机和喇叭音量、设置左右声道音量、设置输入音量等等。

3)、查看设置值

amixer scontents //查看设置值

        “ Headphone”项目就是设置耳机音量的,音量范围为 0-127,当前音量为 0。有些设置项是 bool 类型,只有 on 和 off 两种状态。

4)、设置声卡

amixer sset 设置项目 设置值

amixer cset 设置项目 设置值
 

5)、获取声卡设置值

amixer sget 设置项目

amixer cget 设置项目
 

2、音乐播放测试

1)、使用amixer设置声卡

amixer sset Headphone 100,100
amixer sset Speaker 120,120
amixer sset 'Right Output Mixer PCM' on
amixer sset 'Left Output Mixer PCM' on

2)、使用aply播放WAV格式音乐

aplay test.wav //播放歌曲

3、MIC录音测试

1)、使用amixer设置声卡

4 amixer cset name='Capture Volume' 90,90
5
6 #PCM
7 amixer sset 'PCM Playback' on
8 amixer sset 'Playback' 256
9 amixer sset 'Right Output Mixer PCM' on
10 amixer sset 'Left Output Mixer PCM' on
11
12 #ADC PCM
13 amixer sset 'ADC PCM' 200
14
15 #耳机/喇叭(扬声器)设置播放音量,直流/交流
16 #Turn on Headphone
17 amixer sset 'Headphone Playback ZC' on
18 #Set the volume of your headphones(98% volume, 127 is the MaxVolume)
19 amixer sset Headphone 125,125
20 #Turn on the speaker
21 amixer sset 'Speaker Playback ZC' on
22 #Set the volume of your Speaker(98% volume, 127 is the MaxVolume)
23 amixer sset Speaker 125,125
24 #Set the volume of your Speaker AC(80% volume, 100 is the MaxVolume)
25 amixer sset 'Speaker AC' 4
26 #Set the volume of your Speaker AC(80% volume, 5 is the MaxVolume)
27 amixer sset 'Speaker DC' 4
28
29 #音频输入,左声道管理
30 #Turn on Left Input Mixer Boost
31 amixer sset 'Left Input Mixer Boost' off
32 amixer sset 'Left Boost Mixer LINPUT1' off
33 amixer sset 'Left Input Boost Mixer LINPUT1' 0
34 amixer sset 'Left Boost Mixer LINPUT2' off
35 amixer sset 'Left Input Boost Mixer LINPUT2' 0
36 #Turn off Left Boost Mixer LINPUT3
37 amixer sset 'Left Boost Mixer LINPUT3' off
38 amixer sset 'Left Input Boost Mixer LINPUT3' 0
39
40 #音频输入,右声道管理,全部关闭
41 #Turn on Right Input Mixer Boost
42 amixer sset 'Right Input Mixer Boost' on
43 amixer sset 'Right Boost Mixer RINPUT1' off
44 amixer sset 'Right Input Boost Mixer RINPUT2' 0
45 amixer sset 'Right Boost Mixer RINPUT2' on
46 amixer sset 'Right Input Boost Mixer RINPUT2' 127
47 amixer sset 'Right Boost Mixer RINPUT3' off
48 amixer sset 'Right Input Boost Mixer RINPUT3' 0

给予 mic_in_config.sh 可执行权限并运行,命令如下:
chmod 777 mic_in_config.sh //给予可执行权限
./mic_in_config.sh //运行


2)、使用arecord录制音频

        使用 arecord 来录制一段 10 秒中的音频, arecord 也是 alsa-utils 编译出来的,输入如下命
令:
arecord -f cd -d 10 record.wav
-f 是设置录音质量,“ -f cd”表示录音质量为 cd 级别。 -d 是指定录音时间,单位是 s,这
条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为 record.wav。

3)、单声道MIC录制立体声音频

        将 R23 寄存器的值改为 0x01c4。

4、LINE IN录音测试

1)、使用amixer设置声卡

4 amixer cset name='Capture Volume' 100,100
5
6 #PCM
7 amixer sset 'PCM Playback' on
8 amixer sset 'Playback' 256
9 amixer sset 'Right Output Mixer PCM' on
10 amixer sset 'Left Output Mixer PCM' on
11
12 #ADC PCM
13 amixer sset 'ADC PCM' 200
14
15 #录音前应该设置耳机或者扬声器的音量为 0(下面并没有设置)防止干扰
16 #耳机/喇叭(扬声器)设置播放音量,直流/交流
17 #Turn on Headphone
18 amixer sset 'Headphone Playback ZC' on
19 #Set the volume of your headphones(98% volume, 127 is the MaxVolume)
20 amixer sset Headphone 125,125
21 #Turn on the speaker
22 amixer sset 'Speaker Playback ZC' on
23 #Set the volume of your Speaker(98% volume, 127 is the MaxVolume)
24 amixer sset Speaker 125,125
25 #Set the volume of your Speaker AC(80% volume, 100 is the MaxVolume)
26 amixer sset 'Speaker AC' 4
27 #Set the volume of your Speaker AC(80% volume, 5 is the MaxVolume)
28 amixer sset 'Speaker DC' 4
29
30 #音频输入,左声道管理
31 #Turn off Left Input Mixer Boost
32 amixer sset 'Left Input Mixer Boost' on
33 #关闭其他通道输入
34 amixer sset 'Left Boost Mixer LINPUT1' off
35 amixer sset 'Left Input Boost Mixer LINPUT1' 0
36 #关闭麦克风左声道输入
37 amixer sset 'Left Boost Mixer LINPUT2' on
38 amixer sset 'Left Input Boost Mixer LINPUT2' 127
39 #Line_in 右声道输入关闭
40 amixer sset 'Left Boost Mixer LINPUT3' off
41 amixer sset 'Left Input Boost Mixer LINPUT3' 0
42
43
44 #音频输入,右声道管理
45 #Turn on Right Input Mixer Boost
46 amixer sset 'Right Input Mixer Boost' on
47 amixer sset 'Right Boost Mixer RINPUT1' off
48 amixer sset 'Right Input Boost Mixer RINPUT1' 0
49 amixer sset 'Right Boost Mixer RINPUT2' off
50 amixer sset 'Right Input Boost Mixer RINPUT2' 0
51
52 #要想设置成音频输入, 请打开 RINPUT3,看原理图可知
53 #其他的声道通过上面的配置可关闭,这样是为了避免干扰,需要的时候就打开
54 #RINPUT3 打开(关键点)
55 amixer sset 'Right Boost Mixer RINPUT3' on
56 amixer sset 'Right Input Boost Mixer RINPUT3' 127

给予 line_in_config.sh 可执行权限并运行,命令如下:
chmod 777 line_in_config.sh //给予可执行权限
./line_in_config.sh //运行
 

2)、使用arecord录制音频

arecord -f cd -d 10 record.wav
 

六、开机自动配置声卡

1、使用alsactl保存声卡设置

alsactl -f /var/lib/alsa/asound.state store //保存声卡设置
//-f 指定声卡配置文件, store 表示保存。

要使用 asound.state 中的配置信息来配置声卡,执行如下命令即可:

alsactl -f /var/lib/alsa/asound.state restore
//restore 恢复

打开/etc/init.d/rcS 文件,在最后面追加如下内容:

1 if [ -f "/var/lib/alsa/asound.state" ]; then//第 1 行判断/var/lib/alsa/asound.state 这个文件是否存在, 存在的话就执行下面的。
2 echo "ALSA: Restoring mixer setting......"
3 /sbin/alsactl -f /var/lib/alsa/asound.state restore &/*调用/sbin/alsactl 来执行
声卡设置工作。*/
4 fi

七、mplayer播放器移植与使用

1、mplayer移植

1)、移植zlib库

        下载,解压,建文件夹。

        进入文件,配置编译,使用命令如下:

cd zlib-1.2.11/ //进去 zlib 源码
CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AD=arm-linux-gnueabihfas ./configure --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/zlib //配置
make //编译
make install
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/lib/ -rfa

2)、移植mplayer

        下载,解压,建文件夹。

        进入文件,配置编译,使用命令如下:

cd MPlayer-1.4/ //进去 mplayer 源码
./configure --cc=arm-linux-gnueabihf-gcc --host-cc=gcc --target=arm-linux-gnueabihf --disableossaudio --enable-alsa --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/mplayer --extra-cflags="-I
/home/zuozhongkai/linux/IMX6ULL/tool/zlib/include -I
/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/include" --extra-ldflags="-
L/home/zuozhongkai/linux/IMX6ULL/tool/zlib/lib -Iz -
L/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/lib -lasound" --enable-fbdev --disable-mencoder
make //编译

        编译完成以后打开 config.mak 文件,找到“ INSTALLSTRIP = -s”这一行,取消掉后面的“ -s”,否则“ make install”命令会失败!

        “ make install”安装。
 

2、mplayer使用

1)、mplayer播放音频

“ mplayer+歌曲名”即可,比如:mplayer test.flac


2)、视频播放测试

        “ mplayer+视频名”即可,但是这样的话视频不是居中播放的,我们可以加入“ -fs”参数让视频居中播放。

        mplayer test.avi -fs //居中播放视频

八、alsamixer简介

        alsamixer 是一个图形化的声卡设置工具。


本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超级鹰验证码平台使用 + 案例使用

超级鹰主要是用来识别图片形式的验证码&#xff0c;进行登录验证的。 使用流程&#xff1a; 注册账号领取1000题分&#xff0c;新用户可以享受1000题分的优惠。 进去页面之后&#xff0c;点击开发文档&#xff1a; 这里面有很多语言的使用&#xff0c;这篇博客介绍python的…

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…

Halcon算子中的slant倾斜hom_mat2d_slant

1.hom_mat2d_slant(HomMat2DIdentity, rad(50), y, 0, 0, HomMat2DSlant) --这个是选择20度和50度的。&#xff08;0&#xff0c; 0&#xff09;点对应的是左上角&#xff0c;50度就是让y轴产生有50度的倾角。 2.hom_mat2d_slant(HomMat2DIdentity, rad(60), x, 0, 0, HomMat2D…

【GraphQL】PostGraphile简介

Introduction to PostGraphile 什么是PostGraphile&#xff1f; 如果您熟悉Spring Data JPA&#xff0c;那么理解PostGraphile将非常容易。但没关系。让我们来看看。PostgreSQL数据库是一个非常流行的高性能应用数据库。ProstGraphile与PostgreSQL数据库和GraphQL配合使用。 …

Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

错误再现&#xff1a; 启动Springboot项目时候报错 java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Maven/apache-maven-3.6.3/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/Sprin…

彰显营销硬实力!皓量科技连续四年入选《中国数字营销生态图》

11月28日&#xff0c;中国商务广告协会数字营销专业委员会、虎啸奖组委会、秒针营销科学院共同发布了《中国数字营销生态图&#xff08;2023版&#xff09;》&#xff08;以下简称生态图&#xff09;。凭借多年在广告营销领域的精耕细作&#xff0c;皓量科技从2020年开始连续4年…

计算机导论——第37章 磁盘驱动器

关键问题&#xff1a;如何存储和访问磁盘上的数据 现代磁盘驱动器如何存储数据&#xff1f;接口是什么&#xff1f;数据是如何安排和访问的&#xff1f;磁盘调度如何提高性能&#xff1f; 1. 接口 驱动器制造商唯一保证的是单个512字节的写入是原子的&#xff0c;即它将完整地…

计算机硬件(二)

1.内存和内存条的用途 假设运行内存16个g,能开多少软件 后台和前台能同时运行多少APP RAM越大越好 464 6128 8128 10256 例子: 8gx216g 两根内存条 16g运行内存 2.内存频率的用途 DDR5 DDR4 DDR3 后面的数字越大,越好,可以理解为传输的速度&#xff0c;内存搭配主…

【实战教程】PHP如何轻松对接腾讯云COS,实现文件上传下载?

腾讯云提供了一系列丰富的云服务&#xff0c;其中包括对象存储&#xff08;Cloud Object Storage&#xff0c;简称COS&#xff09;&#xff0c;它是一种高可靠性、可扩展性强的云存储服务。本文将介绍如何使用PHP对接腾讯云COS存储服务&#xff0c;实现文件的上传和下载功能。 …

Pytest做性能测试?

Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。 可以考虑使用Pytest-benchmark类库进行。 安装pytest-benchmark 首先&#xff0c;确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件&#xff1a; pip install pytest pytest-benchmark …

这是怎么了?继阿里11月故障后,淘宝这个问题20 天了还未修复!

继11月12号&#xff0c;阿里云发生大面积故障故障以来&#xff0c;已经过去了近 20天&#xff0c;但是截止到发文时间&#xff0c;作者发现淘宝还有部分功能存在问题&#xff0c;没法正常使用。 难道真是降本增笑&#xff0c;开猿截流&#xff0c;导致没有相关负责人员了&…

什么是勒索软件

勒索软件 1. 定义2. 勒索软件的类型3. 勒索软件的工作方式4. 如何处置勒索软件 1. 定义 勒索软件又称勒索病毒&#xff0c;是一种特殊的恶意软件。勒索软件的特殊之处在于&#xff0c;它采用加密等技术手段限制受害者访问系统或系统内的数据&#xff08;如文档、邮件、数据库、…

wps备份功能 救了我一命

感谢wps备份功能 救了我一命 文章目录 感谢wps备份功能 救了我一命**&#x1f4dd;场景回现&#xff0c;往后再不干了**&#x1f9e3;灵光一现&#x1f4c7;备注中心的设置流程&#x1f58a;️最后总结 &#x1f4dd;场景回现&#xff0c;往后再不干了 小&#x1f42e;今天接到…

数字人可以为文化传播带来什么?

近日&#xff0c;由哈萨克斯坦驻华大使馆、中国外文局文化传播中心、中关村科幻产业创新中心联合发起的中哈青年友谊数字人怡漾和苏路&#xff08;Сұлу&#xff09;正式发布。其中&#xff0c;代表中方形象的数字人怡漾&#xff0c;不仅将成为中哈青年文化交流的标志与代言…

如何在 AdsPower 浏览器中设置代理

AdsPower是一款反检测指纹浏览器&#xff0c;来自中国开发团队的一款对电子商务营销人员非常有用的强大工具&#xff0c;同时具有出色的英语支持。AdsPower浏览器的主要优势是其价格便宜&#xff0c;与竞争对手相比&#xff0c;但其功能和整体工作表现甚至不逊于Indigo。 AdsP…

2023开发者必备iOS开发工具

​ 工欲善其事&#xff0c;必先利其器。进行开发工作时&#xff0c;利用并熟练使用恰当的工具可以让工作效率得到大幅度提高。下边会介绍一些在进行iOS开发工作时常用的一些工具&#xff0c;本文并不对其进行展开&#xff0c;对使用方法及工作原理感兴趣的同学可以自行进行更深…

【多线程】-- 08 线程状态观测、线程优先级、守护线程

多线程 5 线程状态 5.5 线程状态观测 Thread.State线程可以处于以下状态之一&#xff1a; NEW&#xff1a;尚未启动的线程处于此状态RUNNABLE&#xff1a;在Java虚拟机中执行的线程处于此状态BLOCKED&#xff1a;被阻塞等待监视器锁定的线程处于此状态WAITING&#xff1a;正…

快手获客技巧:轻松获取高转化率的潜在客户!

**一、引言** 随着互联网的发展&#xff0c;越来越多的企业开始关注短视频平台&#xff0c;尤其是快手。作为中国最大的短视频平台之一&#xff0c;快手拥有庞大的用户群体和丰富的视频内容。通过掌握快手获客技巧&#xff0c;企业不仅可以获取更多潜在客户&#xff0c;还能提高…

Django回顾【四】之模型层

目录 一、基本使用 1、ORM框架 2、创建表 二、常用和非常用字段 三、常用和非常用字段参数 四、settings配置 五、基本操作 5.1 增加表记录 5.2 删除表纪录 5.3 更新表纪录 5.4 查询表纪录 六、 多表操作-创建关系 七、基于对象的跨表查询 八、基于链表的跨表…

Elasticsearch:为现代搜索工作流程和生成式人工智能应用程序铺平道路

作者&#xff1a;Matt Riley Elastic 的创新投资支持开放的生态系统和更简单的开发者体验。 在本博客中&#xff0c;我们希望分享 Elastic 为简化你构建 AI 应用程序的体验而进行的投资。 我们知道&#xff0c;开发人员必须在当今快速发展的人工智能环境中保持灵活性。 然而&a…