20260311解决瑞芯微原厂RK3576的Android14刷入乐晓电子的K7开发板后解决使用tinyplay播放wav音频

tinymix -D 0

tinymix 75 1 #
tinymix 77 1 # Right Mixer Right Playback Switch
tinymix 79 1 # OUT1 Switch
tinymix 58 # 查看当前值和可能的范围(如果有)
tinymix 58 27 27

【可选】
tinymix "Left Mixer Left Playback Switch" 1
tinymix "Right Mixer Right Playback Switch" 1
tinymix "OUT1 Switch" 1
tinymix "Output 1 Playback Volume" 30 30

tinyplay kiss8.wav -D 0 -d 0

20260311解决瑞芯微原厂RK3576的Android14刷入乐晓电子的K7开发板后解决使用tinyplay播放wav音频

2026/3/11 18:27

缘起:播放 百度视频的视频,和本地 音频 没有声音的时候,很容易/艰难搞定通过tinyplay播放WAV音频的问题了!

现在:【问DeepSeek】

播放 百度视频的视频,和本地 音频都有声音。确认从耳机输出的声音。RK3576的Anroid14

现在在查找tinyplay播放WAV音频无声的原因

es8388声卡 配置异常的时候,百度网页 视频 没有声音。本地播放也没有声音。

使用tinyplay播放kiss8.wav是正常的。

排除 这些问题

播放百度视频的视频/播放本地音频结束之后,控件值又被还原了!

rk3576_u:/ $

rk3576_u:/ $ su

rk3576_u:/ #

rk3576_u:/ #

rk3576_u:/ # lsof | grep pcm

tinyplay 2434 root 4u CHR 116,2 0t0 469 /dev/snd/pcmC0D0p

rk3576_u:/ #

rk3576_u:/ # cat /proc/asound/pcm

00-00: dailink-multicodecs ES8323 HiFi-0 : dailink-multicodecs ES8323 HiFi-0 : playback 1 : capture 1

01-00: rockchip-dp0 spdif-hifi-0 : rockchip-dp0 spdif-hifi-0 : playback 1

02-00: rockchip-hdmi i2s-hifi-0 : rockchip-hdmi i2s-hifi-0 : playback 1 : capture 1

rk3576_u:/ #

rk3576_u:/ # cat /proc/asound/card0/pcm0p/sub0/status

state: RUNNING

owner_pid : 2434

trigger_time: 1773209282.092204021

tstamp : 1773209317.838874908

delay : 3536

avail : 560

avail_max : 1032


hw_ptr : 1576496

appl_ptr : 1580032

rk3576_u:/ #

rk3576_u:/ # dmesg | tail -20

1687.333060 healthd: battery l=50 v=3300 t=2.6 h=2 st=3 c=-1600 fc=100 chg=au

rk3576_u:/ #

我们被问到关于RK3576 Android14的问题。之前用户报告耳机没有声音,然后一步步调试。最后用户给出新的信息:他们运行了tinyplay,并用lsof和cat /proc/asound/...等命令。这些输出表明:

用户执行了tinyplay(PID 2434),并且它打开了/dev/snd/pcmC0D0p。

/proc/asound/pcm显示00-00是"dailink-multicodecs ES8323 HiFi-0",这是声卡0设备0,支持播放和捕获。

01-00是"rockchip-dp0 spdif-hifi-0"(可能是DP音频),02-00是"rockchip-hdmi i2s-hifi-0"(HDMI音频)。

/proc/asound/card0/pcm0p/sub0/status显示状态为RUNNING,owner_pid 2434,说明tinyplay正在播放,且没有错误(delay, avail等正常)。

dmesg | tail -20只显示了healthd消息,没有音频错误。

结合之前的上下文:用户说"es8388声卡配置异常的时候,百度网页视频没有声音。本地播放也没有声音。使用tinyplay播放kiss8.wav是正常的。" 但现在他们可能是在另一个场景下测试:上层应用有声音(百度视频等),但tinyplay无声?不,从最新输出看,他们运行了tinyplay并且成功了(因为status显示RUNNING)。但用户最后的问题是"现在在查找tinyplay播放WAV音频无声的原因",这可能意味着他们仍遇到tinyplay无声,但这次给出的数据却显示tinyplay正在运行并播放?我们需要重新解读。

用户之前说:"播放 百度视频的视频,和本地 音频都有声音。确认从耳机输出的声音。" 这表示上层应用有声音,且是从耳机输出的。但"tinyplay没有声音"是指此时tinyplay无声。然后我们建议了检查权限、设备节点等。他们执行了命令,我们看到lsof显示tinyplay打开了pcmC0D0p,status是RUNNING。这很奇怪:如果tinyplay正在播放且status RUNNING,理论上应该有声音。但用户说tinyplay无声,所以可能有其他原因:比如虽然驱动认为正在播放,但实际音频数据没有送到耳机?但status的delay和avail值看起来正常。

可能用户没有真正播放tinyplay,或者他们运行tinyplay时没有听到声音,但驱动却认为它在播放。或者tinyplay播放的是一个静音文件?或者硬件通路配置不对,但驱动层面没有报错,只是数据没有路由到物理输出。

我们需要帮助用户诊断为什么tinyplay虽然打开设备并写入数据,但耳机听不到声音。从之前的tinymix输出看,用户设置了"Output 1 Playback Volume" 192 192,但那个设置失败了(因为之前命令语法错误)。我们后来建议了正确命令,但用户没有反馈是否成功设置。我们需要确认当前混音器状态是否正确。

目前用户只给了最新的lsof等,没有给最新的tinymix。所以我们需要用户提供最新的tinymix输出,以确保所有必要的音频路径开关已经开启。

此外,上层应用(百度视频)有声音,说明HAL层正确配置了声卡。但tinyplay无声,可能是因为tinyplay和上层应用使用的是不同的PCM设备?从/proc/asound/pcm看,有多个播放设备:00-00(ES8323),01-00(DP),02-00(HDMI)。上层应用可能使用了01-00或02-00,而不是00-00。虽然tinyplay打开了00-00,并且状态RUNNING,但00-00可能没有物理连接到耳机输出?耳机输出可能连接到哪个设备?从之前的tinymix控件来看,mixer name是"rockchip-es8388",这是ES8388 codec,应该对应声卡0。耳机输出应该通过声卡0。所以tinyplay用声卡0是正确的。但为什么上层应用有声而tinyplay无声?可能是因为上层应用在播放时,通过HAL配置了codec的路径,而tinyplay没有配置(或者tinyplay之前配置过但被覆盖了?)。

一个可能性:当上层应用播放时,它通过HAL自动设置了tinymix的某些控件(比如hp switch、输出音量等)。当上层应用停止播放后,这些控件可能恢复默认值(或保持不变)。然后用户运行tinyplay,但tinyplay不会自动设置这些控件,所以如果控件处于静音状态,tinyplay也会无声。而用户之前尝试用tinymix设置,但可能没有设置正确。

用户之前尝试设置"Output 1 Playback Volume" 192 192时遇到了"Error: invalid value for index 0"。这可能是因为该控件需要两个值(左右声道),但用户只给了一个?但命令tinymix "Output 1 Playback Volume" 192 192应该给两个值,为什么会报错?可能是控件名称不完全匹配?我们需要检查tinymix输出中控件的确切名称。在之前的输出中,控件58是"Output 1 Playback Volume",类型INT,num 2,所以应该接受两个整数。用户命令应该正确。但报错说invalid value for index 0,可能原因是值超出了范围?需要查看该控件的取值范围。可以用tinymix -D 0 get 58来查看当前值和范围(如果支持)。或者检查控件的最大值。

另外,用户成功设置了"hp switch" 1和"Speaker Switch" 0,但后续检查tinymix输出显示"hp switch"仍为Off?在最新的tinymix输出中(之前提供的,不是最新的),我们看到"hp switch"是Off,"Output 1 Playback Volume"是0 0。这可能是因为他们设置后没有重新检查,或者设置未生效。但设置"hp switch" 1的命令没有报错,应该生效了。我们需要用户重新执行tinymix来确认当前值。

所以当前的主要任务是让用户提供最新的完整的tinymix输出,以确认所有必要的控件(输出音量、hp switch、OUT1 Switch、Left Mixer Left Playback Switch等)是否已正确设置。

此外,还需要确认tinyplay播放的文件是否是真正的音频文件(不是静音文件)。可以用hexdump检查文件头。

但用户说"使用tinyplay播放kiss8.wav是正常的",可能是指在声卡配置异常的时候tinyplay正常。而现在声卡配置正常(上层应用有声),但tinyplay无声?这更奇怪了:因为声卡配置正常时,tinyplay应该也能正常发声,只要路径正确。可能是上层应用改变了某些设置,使得tinyplay无法使用同一通路?但上层应用播放时,通路是开启的,停止后可能关闭了。tinyplay需要自己开启。

我们应指导用户:

在播放上层应用(有声音)后,立即运行tinyplay(不改变任何设置),看是否有声。如果无声,则说明tinyplay需要的控件在上层应用停止后被关闭了。然后需要手动开启那些控件。

提供最新的tinymix输出(在tinyplay播放时抓取),以便检查哪些控件没有打开。

确认tinyplay播放时音量控件是否设置正确。可以用tinymix 58查看当前Output 1 Playback Volume值。

由于用户之前设置时遇到错误,可能音量设置没成功。需要帮助用户正确设置音量。

我们需要输出一个步骤清晰的回答,引导用户逐步操作并收集信息。

另外,从/proc/asound/pcm看到,声卡0的播放计数为1,说明有一个播放流正在运行,正是tinyplay(pid 2434)。但用户可能是在测试tinyplay时抓取的这些信息,然后tinyplay正在运行,但用户听不到声音。所以重点在于硬件通路配置。

建议用户:

播放一个已知有声音的音频文件(如kiss8.wav)通过tinyplay,同时执行tinymix,保存输出。

播放上层应用(百度视频)有声音时,也执行tinymix,保存输出。

对比两份tinymix,找出差异。特别是那些与耳机输出相关的控件:Output 1 Playback Volume, hp switch, OUT1 Switch, Left Mixer Left Playback Switch, Right Mixer Right Playback Switch等。

另外,检查tinyplay播放时,耳机是否插好,是否被静音。可能是硬件开关问题。

我们需要写一个综合的回答,包含以下要点:

确认tinyplay正在运行且没有错误(status RUNNING),但无声,说明数据流到了驱动,但可能因为混音器控件设置不当,没有路由到物理输出。

指导用户对比上层应用播放和tinyplay播放时的tinymix状态。

指导用户正确设置必要的控件(提供命令示例),特别是之前报错的Output 1 Playback Volume,可能是数值范围不对,可以尝试设置小一点的数值如30 30,并解释如何查看控件的取值范围。

如果对比发现差异,解释需要开启哪些控件。

如果一切控件相同但tinyplay仍无声,考虑tinyplay使用的声道数或格式与硬件当前设置不匹配,尽管tinypcminfo显示支持,但可能驱动期望特定格式。可以尝试用tinyplay指定参数与上层应用播放时格式一致(通过cat /proc/asound/card0/pcm0p/sub0/hw_params查看当前硬件参数)。

最后,建议如果问题解决,考虑永久修改配置文件。

我们还要注意用户是root权限,所以可以执行任何命令。

现在整理回答。

根据你最新的输出,tinyplay(PID 2434)已经成功打开 pcmC0D0p 设备,并且内核报告该设备处于 RUNNING 状态,说明音频数据正在被写入驱动。然而,你听不到声音,这意味着数据虽然送到了内核,但未能正确路由到耳机物理输出。问题很可能出在声卡混音器(tinymix)的控件配置上,导致音频信号在 codec 内部被阻断或静音。

关键线索

上层应用(百度视频等)有声音,说明硬件通路本身是好的,且 Android 的音频 HAL 能正确配置 codec。

tinyplay 无声,是因为它不会自动设置混音器控件,必须依赖你手动通过 tinymix 开启相关通路。

你之前尝试设置 Output 1 Playback Volume 时遇到错误,可能该控件未正确设置,导致音量仍为 0。

?? 立即排查步骤

  1. 确认当前混音器状态

在 tinyplay 正在播放时(即你刚执行 tinyplay 且无声),另开一个终端窗口执行:

bash

tinymix -D 0 > /data/tinymix_tinyplay.txt

同时,播放上层应用(百度视频,确保耳机有声)时,再抓取一份:

bash

tinymix -D 0 > /data/tinymix_app.txt

对比两份文件,重点关注以下控件(它们必须为 On 或非零值):

text

Output 1 Playback Volume → 应为非零,例如 192 192

hp switch → 应为 On

OUT1 Switch → 应为 On

Left Mixer Left Playback Switch → 应为 On

Right Mixer Right Playback Switch → 应为 On

PCM Volume → 应为非零(当前 192 192 已正常)

如果 tinyplay 时这些值为 Off 或 0,则需手动设置。

  1. 正确设置关键控件

请按以下顺序执行命令,确保无报错:

2.1 设置输出音量

之前你遇到 Error: invalid value for index 0,可能是因为数值超出范围。先查看该控件的取值范围:

bash

查看控件详细信息(如果支持)

tinymix -D 0 get 58

若无法查看,尝试设置一个较小的值(如 30)来测试是否生效:

bash

tinymix 58 30 30

成功后逐步调高。常见有效范围是 0~192 或 0~255,192 是 0dB 的典型值。

2.2 开启耳机功放开关

bash

tinymix 64 1 # hp switch

2.3 开启输出级开关

bash

tinymix 79 1 # OUT1 Switch

tinymix 80 1 # OUT2 Switch(如果耳机接OUT2)

2.4 开启混音器通路

bash

tinymix 75 1 # Left Mixer Left Playback Switch

tinymix 77 1 # Right Mixer Right Playback Switch

2.5 验证设置

执行 tinymix | grep -E "Output 1|hp switch|OUT|Playback Switch",应看到所有值已正确。

  1. 重新测试 tinyplay

再次运行:

bash

tinyplay /sdcard/kiss8.wav -D 0 -d 0

如果仍无声,检查 tinyplay 的输出参数是否与当前硬件配置一致。在 tinyplay 播放时,查看硬件实际参数:

bash

cat /proc/asound/card0/pcm0p/sub0/hw_params

输出类似:

text

access: MMAP_INTERLEAVED

format: S16_LE

subformat: STD

channels: 2

rate: 44100 (44100/1)

period_size: 1024

buffer_size: 16384

然后确保你的 WAV 文件参数与此匹配。若不匹配,用 tinyplay 的 -r、-c、-b 选项强制指定匹配的值。

  1. 检查上层应用播放时的硬件参数

在百度视频播放时,同样查看 hw_params(注意此时播放设备可能是 pcmC0D0p 或其他,用 lsof | grep pcm 确认),记录下参数。之后用 tinyplay 模拟相同参数播放。

  1. 临时关闭音频服务(可选)

如果以上均无效,可以尝试停止 Android 音频服务,让 tinyplay 完全独占声卡,避免 HAL 干扰:

bash

stop audioserver

然后运行 tinyplay

tinyplay /sdcard/kiss8.wav -D 0 -d 0

测试完后重启服务

start audioserver

注意:这会暂时使系统无声音,但可排除 HAL 动态修改控件的可能。

?? 预期结果

通过上述步骤,你应该能让 tinyplay 正常发声。如果仍然无声,请提供:

两份对比的 tinymix 输出文件。

tinyplay 播放时的 hw_params 内容。

你的 WAV 文件信息(file /sdcard/kiss8.wav)。

这样我们可以进一步定位是控件配置还是参数不匹配的问题。

tinyplay播放:

Mixer name: 'rockchip-es8388'

Number of controls: 81

ctl type num name value

0 ENUM 1 SAI1 Transmit Start Mode Sel Standalone

1 ENUM 1 SAI1 Receive Start Mode Sel Standalone

2 ENUM 1 SAI1 Transmit SDOx Select Auto

3 ENUM 1 SAI1 Receive SDIx Select Auto

4 INT 1 SAI1 Receive Mono Slot Select 0

5 ENUM 1 SAI1 Receive Mono Switch Disable

6 ENUM 1 SAI1 Transmit Mono Switch Disable

7 ENUM 1 SAI1 SDI3 Loopback I2S LR Channel Sel L:MIC R:LP

8 ENUM 1 SAI1 SDI2 Loopback I2S LR Channel Sel L:MIC R:LP

9 ENUM 1 SAI1 SDI1 Loopback I2S LR Channel Sel L:MIC R:LP

10 ENUM 1 SAI1 SDI0 Loopback I2S LR Channel Sel L:MIC R:LP

11 ENUM 1 SAI1 SDI3 Loopback I2S LR Switch Disable

12 ENUM 1 SAI1 SDI2 Loopback I2S LR Switch Disable

13 ENUM 1 SAI1 SDI1 Loopback I2S LR Switch Disable

14 ENUM 1 SAI1 SDI0 Loopback I2S LR Switch Disable

15 ENUM 1 SAI1 SDI3 Loopback Src Select From SDO0

16 ENUM 1 SAI1 SDI2 Loopback Src Select From SDO0

17 ENUM 1 SAI1 SDI1 Loopback Src Select From SDO0

18 ENUM 1 SAI1 SDI0 Loopback Src Select From SDO0

19 ENUM 1 SAI1 SDI3 Loopback Switch Disable

20 ENUM 1 SAI1 SDI2 Loopback Switch Disable

21 ENUM 1 SAI1 SDI1 Loopback Switch Disable

22 ENUM 1 SAI1 SDI0 Loopback Switch Disable

23 ENUM 1 SAI1 Sync Out Switch From CRU

24 ENUM 1 SAI1 Sync In Switch From IO

25 ENUM 1 SAI1 Receive PATH3 Source Select From SDI3

26 ENUM 1 SAI1 Receive PATH2 Source Select From SDI2

27 ENUM 1 SAI1 Receive PATH1 Source Select From SDI1

28 ENUM 1 SAI1 Receive PATH0 Source Select From SDI0

29 ENUM 1 SAI1 Transmit SDO3 Source Select From PATH3

30 ENUM 1 SAI1 Transmit SDO2 Source Select From PATH2

31 ENUM 1 SAI1 Transmit SDO1 Source Select From PATH1

32 ENUM 1 SAI1 Transmit SDO0 Source Select From PATH0

33 BOOL 1 SAI1 Clk Auto Switch Off

34 INT 1 SAI1 PCM Read Wait Time MS 0

35 INT 1 SAI1 PCM Write Wait Time MS 0

36 ENUM 1 3D Mode Level 1

37 INT 1 ALC Capture Target Volume 12

38 INT 1 ALC Capture Max PGA 0

39 INT 1 ALC Capture Min PGA 0

40 ENUM 1 ALC Capture Function Off

41 BOOL 1 ALC Capture ZC Switch Off

42 INT 1 ALC Capture Hold Time 0

43 INT 1 ALC Capture Decay Time 0

44 INT 1 ALC Capture Attack Time 5

45 INT 1 ALC Capture NG Threshold 10

46 ENUM 1 ALC Capture NG Type Mute ADC Output

47 BOOL 1 ALC Capture NG Switch Off

48 BOOL 1 ZC Timeout Switch Off

49 INT 2 Capture Digital Volume 192 192

50 BOOL 1 Capture Mute Off

51 INT 1 Left Channel Capture Volume 0

52 INT 1 Right Channel Capture Volume 0

53 ENUM 1 Playback De-emphasis None

54 ENUM 1 Capture Polarity Normal

55 INT 2 PCM Volume 192 192

56 INT 1 Left Mixer Left Bypass Volume 0

57 INT 1 Right Mixer Right Bypass Volume 0

58 INT 2 Output 1 Playback Volume 0 0

59 INT 2 Output 2 Playback Volume 0 0

60 ENUM 1 ADC Data Select Left Right

61 BOOL 1 Headphone Jack On

62 BOOL 1 Headset Mic Jack Off

63 BOOL 1 spk switch Off

64 BOOL 1 hp switch Off

65 BOOL 1 Headphone Switch On

66 BOOL 1 Speaker Switch On

67 BOOL 1 Main Mic Switch On

68 BOOL 1 Headset Mic Switch Off

69 ENUM 1 Left PGA Mux DifferentialL

70 ENUM 1 Right PGA Mux DifferentialR

71 ENUM 1 Differential Mux Line 2

72 ENUM 1 Mono Mux Stereo

73 ENUM 1 Left Line Mux Line 1L

74 ENUM 1 Right Line Mux Line 1R

75 BOOL 1 Left Mixer Left Playback Switch Off

76 BOOL 1 Left Mixer Left Bypass Switch Off

77 BOOL 1 Right Mixer Right Playback Switch Off

78 BOOL 1 Right Mixer Right Bypass Switch Off

79 BOOL 1 OUT1 Switch Off

80 BOOL 1 OUT2 Switch Off

本地播放:

Mixer name: 'rockchip-es8388'

Number of controls: 81

ctl type num name value

0 ENUM 1 SAI1 Transmit Start Mode Sel Standalone

1 ENUM 1 SAI1 Receive Start Mode Sel Standalone

2 ENUM 1 SAI1 Transmit SDOx Select Auto

3 ENUM 1 SAI1 Receive SDIx Select Auto

4 INT 1 SAI1 Receive Mono Slot Select 0

5 ENUM 1 SAI1 Receive Mono Switch Disable

6 ENUM 1 SAI1 Transmit Mono Switch Disable

7 ENUM 1 SAI1 SDI3 Loopback I2S LR Channel Sel L:MIC R:LP

8 ENUM 1 SAI1 SDI2 Loopback I2S LR Channel Sel L:MIC R:LP

9 ENUM 1 SAI1 SDI1 Loopback I2S LR Channel Sel L:MIC R:LP

10 ENUM 1 SAI1 SDI0 Loopback I2S LR Channel Sel L:MIC R:LP

11 ENUM 1 SAI1 SDI3 Loopback I2S LR Switch Disable

12 ENUM 1 SAI1 SDI2 Loopback I2S LR Switch Disable

13 ENUM 1 SAI1 SDI1 Loopback I2S LR Switch Disable

14 ENUM 1 SAI1 SDI0 Loopback I2S LR Switch Disable

15 ENUM 1 SAI1 SDI3 Loopback Src Select From SDO0

16 ENUM 1 SAI1 SDI2 Loopback Src Select From SDO0

17 ENUM 1 SAI1 SDI1 Loopback Src Select From SDO0

18 ENUM 1 SAI1 SDI0 Loopback Src Select From SDO0

19 ENUM 1 SAI1 SDI3 Loopback Switch Disable

20 ENUM 1 SAI1 SDI2 Loopback Switch Disable

21 ENUM 1 SAI1 SDI1 Loopback Switch Disable

22 ENUM 1 SAI1 SDI0 Loopback Switch Disable

23 ENUM 1 SAI1 Sync Out Switch From CRU

24 ENUM 1 SAI1 Sync In Switch From IO

25 ENUM 1 SAI1 Receive PATH3 Source Select From SDI3

26 ENUM 1 SAI1 Receive PATH2 Source Select From SDI2

27 ENUM 1 SAI1 Receive PATH1 Source Select From SDI1

28 ENUM 1 SAI1 Receive PATH0 Source Select From SDI0

29 ENUM 1 SAI1 Transmit SDO3 Source Select From PATH3

30 ENUM 1 SAI1 Transmit SDO2 Source Select From PATH2

31 ENUM 1 SAI1 Transmit SDO1 Source Select From PATH1

32 ENUM 1 SAI1 Transmit SDO0 Source Select From PATH0

33 BOOL 1 SAI1 Clk Auto Switch Off

34 INT 1 SAI1 PCM Read Wait Time MS 0

35 INT 1 SAI1 PCM Write Wait Time MS 0

36 ENUM 1 3D Mode Level 1

37 INT 1 ALC Capture Target Volume 12

38 INT 1 ALC Capture Max PGA 0

39 INT 1 ALC Capture Min PGA 0

40 ENUM 1 ALC Capture Function Off

41 BOOL 1 ALC Capture ZC Switch Off

42 INT 1 ALC Capture Hold Time 0

43 INT 1 ALC Capture Decay Time 0

44 INT 1 ALC Capture Attack Time 5

45 INT 1 ALC Capture NG Threshold 10

46 ENUM 1 ALC Capture NG Type Mute ADC Output

47 BOOL 1 ALC Capture NG Switch Off

48 BOOL 1 ZC Timeout Switch Off

49 INT 2 Capture Digital Volume 192 192

50 BOOL 1 Capture Mute Off

51 INT 1 Left Channel Capture Volume 0

52 INT 1 Right Channel Capture Volume 0

53 ENUM 1 Playback De-emphasis None

54 ENUM 1 Capture Polarity Normal

55 INT 2 PCM Volume 192 192

56 INT 1 Left Mixer Left Bypass Volume 0

57 INT 1 Right Mixer Right Bypass Volume 0

58 INT 2 Output 1 Playback Volume 27 27

59 INT 2 Output 2 Playback Volume 0 0

60 ENUM 1 ADC Data Select Left Right

61 BOOL 1 Headphone Jack On

62 BOOL 1 Headset Mic Jack Off

63 BOOL 1 spk switch Off

64 BOOL 1 hp switch Off

65 BOOL 1 Headphone Switch On

66 BOOL 1 Speaker Switch On

67 BOOL 1 Main Mic Switch On

68 BOOL 1 Headset Mic Switch Off

69 ENUM 1 Left PGA Mux DifferentialL

70 ENUM 1 Right PGA Mux DifferentialR

71 ENUM 1 Differential Mux Line 2

72 ENUM 1 Mono Mux Stereo

73 ENUM 1 Left Line Mux Line 1L

74 ENUM 1 Right Line Mux Line 1R

75 BOOL 1 Left Mixer Left Playback Switch On

76 BOOL 1 Left Mixer Left Bypass Switch Off

77 BOOL 1 Right Mixer Right Playback Switch On

78 BOOL 1 Right Mixer Right Bypass Switch Off

79 BOOL 1 OUT1 Switch On

80 BOOL 1 OUT2 Switch Off

我们获得了两个tinymix状态对比:tinyplay播放时(无声)和本地播放时(有声)。差异很明显。

我们提取关键控件对比:

tinyplay播放时 (无声):

ctl58 Output 1 Playback Volume: 0 0

ctl64 hp switch: Off

ctl75 Left Mixer Left Playback Switch: Off

ctl77 Right Mixer Right Playback Switch: Off

ctl79 OUT1 Switch: Off

ctl80 OUT2 Switch: Off

本地播放时 (有声):

ctl58 Output 1 Playback Volume: 27 27 (非零)

ctl64 hp switch: Off (仍然Off? 这里需要注意,但可能耳机输出并不依赖hp switch?但之前分析应该需要。这里显示Off但本地有声,说明要么耳机输出不依赖此控件,或者有其他路径。再看)

ctl75 Left Mixer Left Playback Switch: On

ctl77 Right Mixer Right Playback Switch: On

ctl79 OUT1 Switch: On

ctl80 OUT2 Switch: Off

另外,扬声器开关 Speaker Switch 在两种情况下都是On,但spk switch是Off,这合理。

从差异看,tinyplay无声的根本原因是:

Output 1 Playback Volume 为零

左右声道混音器开关关闭

OUT1 输出级关闭

因此,要让tinyplay有声,必须设置这些控件。用户之前尝试设置音量时遇到了错误。我们需指导用户正确设置这些控件,并解释可能的值范围。

之前用户执行 tinymix "Output 1 Playback Volume" 192 192 时报错 Error: invalid value for index 0。这可能是因为该控件值范围较小(本地播放时是27 27),或许最大值不是192。需要先查询控件范围。

建议操作:

查询 ctl58 的取值范围:可能通过 tinymix -D 0 get 58 或查看控件信息。如果没有直接范围,可以尝试设置较小的值,如30 30。因为本地播放时是27 27,说明有效。

开启必要的开关:

tinymix 75 1 # Left Mixer Left Playback Switch

tinymix 77 1 # Right Mixer Right Playback Switch

tinymix 79 1 # OUT1 Switch

tinymix 58 30 30 # Output 1 Playback Volume

可选:tinymix 64 1 # hp switch,但本地播放时是Off却有声,可能此控件不是必需的,不过设置也无妨。

然后重新测试tinyplay。

用户还需确认WAV格式匹配,但之前tinyplay曾成功过,所以格式应该没问题。

另外,检查hw_params确保tinyplay使用的参数与上层应用一致。但既然之前能成功,说明参数本身没问题。

现在我们需要生成最终回答,总结对比结果,给出具体命令,并解释为什么上层应用有声而tinyplay无声(因为上层音频服务会自动配置这些混音器控件,而tinyplay需要手动配置)。

通过对你提供的两份 tinymix 输出进行对比,问题根源已经非常明确:

控件 (ctl) tinyplay 播放时 (无声) 本地播放时 (有声) 作用说明

58 Output 1 Playback Volume 0 0 27 27 耳机输出音量,必须为非零

64 hp switch Off Off 可能不影响当前耳机通路(本地有声时仍为Off)

75 Left Mixer Left Playback Switch Off On 将左声道数字音频混入输出

77 Right Mixer Right Playback Switch Off On 将右声道数字音频混入输出

79 OUT1 Switch Off On 启用OUT1输出级(耳机通常接OUT1)

80 OUT2 Switch Off Off OUT2未使用

结论:tinyplay 无声是因为耳机输出通路的关键控件未被开启,且音量设置为0。 上层应用(如百度视频)播放时,Android 音频 HAL 会自动配置这些控件,因此有声;而 tinyplay 作为底层工具,必须手动设置它们。

? 立即修复:让 tinyplay 正常发声

请按顺序执行以下命令(每条命令都应成功,无报错):

  1. 开启混音器通路和输出级

bash

tinymix 75 1 # Left Mixer Left Playback Switch

tinymix 77 1 # Right Mixer Right Playback Switch

tinymix 79 1 # OUT1 Switch

  1. 设置耳机输出音量

先查询 Output 1 Playback Volume 的有效范围(避免设置超出范围的值):

bash

tinymix 58 # 查看当前值和可能的范围(如果有)

如果无法获取范围,尝试设置一个较小的值(如本地播放时的 27):

bash

tinymix 58 27 27

若成功,再根据需要调高,例如 192(常见0dB):

bash

tinymix 58 192 192

如果 192 报错,说明最大值较小,可以逐步尝试 50、100 等,直到找到合适的值。

  1. (可选)开启耳机功放开关

虽然本地播放时 hp switch 为 Off 也有声,但某些硬件可能依赖它。建议也开启:

bash

tinymix 64 1 # hp switch

  1. 验证配置

执行 tinymix | grep -E "58|64|75|77|79",应看到类似:

text

58 INT 2 Output 1 Playback Volume 192 192

64 BOOL 1 hp switch On

75 BOOL 1 Left Mixer Left Playback Switch On

77 BOOL 1 Right Mixer Right Playback Switch On

79 BOOL 1 OUT1 Switch On

  1. 重新运行 tinyplay

bash

tinyplay /sdcard/kiss8.wav -D 0 -d 0

此时耳机应该有声了。

?? 如果仍无声:检查硬件参数一致性

确保 tinyplay 使用的参数与声卡当前配置一致。在播放时查看硬件参数:

bash

cat /proc/asound/card0/pcm0p/sub0/hw_params

输出示例:

text

access: MMAP_INTERLEAVED

format: S16_LE

channels: 2

rate: 44100 (44100/1)

然后用相同参数播放:

bash

tinyplay /sdcard/kiss8.wav -D 0 -d 0 -r 44100 -c 2 -b 16

?? 永久解决方案

若希望系统启动后 tinyplay 也能直接使用耳机,需修改音频配置文件(如 mixer_paths.xml),确保耳机通路相关控件在初始化时被设为正确值。通常路径为:

/vendor/etc/mixer_paths.xml

/system/etc/mixer_paths.xml

找到 <path name="headphones"> 或类似段落,添加或确认以下内容:

xml

<ctl name="Output 1 Playback Volume" value="192,192" />

<ctl name="hp switch" value="1" />

<ctl name="OUT1 Switch" value="1" />

<ctl name="Left Mixer Left Playback Switch" value="1" />

<ctl name="Right Mixer Right Playback Switch" value="1" />

请执行上述手动设置后再次测试,绝大多数情况下问题即可解决。如果仍然异常,请提供执行命令后的 tinymix 输出和 hw_params 信息,以便进一步定位。

相关推荐
音乐宝贝家27 分钟前
1000-2000元入门面单吉他横评:面板/背侧板/琴颈/指板/桶型全维度技术拆解
新媒体运营·音视频·社交电子·业界资讯·媒体·零售·内容运营
伶俜661 小时前
鸿蒙原生应用实战(一):从零开发一个短视频编辑器 App
编辑器·音视频·harmonyos
Deitymoon2 小时前
RV1126——交叉编译 SDL_TTF库并渲染文字
计算机视觉·音视频·rv1126·osd
EasyCVR11 小时前
国标GB28181视频监控平台EasyCVR夏季安防高风险场景的解决方案
人工智能·音视频
学术头条13 小时前
清华团队开源SCAIL-2:角色动画告别骨骼依赖,端到端还原视频中动作细节
人工智能·科技·机器学习·ai·开源·音视频·agi
做萤石二次开发的哈哈14 小时前
AI 陪护机器人硬件如何接入萤石ERTC 实现实时通话?
人工智能·音视频·实时音视频·萤石开放平台
禹亮科技14 小时前
上海临港100㎡大型跨国会议室音视频集成方案(思科Webex+思必驰AI音频)
人工智能·音视频·思必驰吸顶麦·禹亮科技
爱吃骨头的鱼儿15 小时前
h264码流结构
音视频·h.264
大蚂蚁2号16 小时前
深度解析:2026短视频批量生成底层技术、架构演进与企业落地实战
架构·音视频