离线
在线
按上面的方法是动态链接tinyalsa,
下面这样可以手动静态链接:
cd tinyalsa/utils
arm-linux-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
在线
按上面的方法是动态链接tinyalsa,
下面这样可以手动静态链接:
cd tinyalsa/utils
arm-linux-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
晕哥,上面几行代码是在Makefile上面加吗,要在那个位置加呢
下面是utils下的Makefile文件
DESTDIR ?=
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/man
CROSS_COMPILE ?=
CC = $(CROSS_COMPILE)gcc
CFLAGS += -Wall -Wextra -Werror -Wfatal-errors
CFLAGS += -I ../include
CFLAGS += -L ../src
CFLAGS += -O2
VPATH = ../src:../include/tinyalsa
.PHONY: all
all: -ltinyalsa tinyplay tinycap tinymix tinypcminfo
tinyplay: tinyplay.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinycap: tinycap.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinymix: tinymix.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinypcminfo: tinypcminfo.c pcm.h mixer.h asoundlib.h libtinyalsa.a
.PHONY: clean
clean:
rm -f tinyplay tinycap
rm -f tinymix
rm -f tinypcminfo
.PHONY: install
install: tinyplay tinycap tinymix tinypcminfo
install -d $(DESTDIR)$(BINDIR)
install tinyplay $(DESTDIR)$(BINDIR)/
install tinycap $(DESTDIR)$(BINDIR)/
install tinymix $(DESTDIR)$(BINDIR)/
install tinypcminfo $(DESTDIR)$(BINDIR)/
install -d $(DESTDIR)$(MANDIR)/man1
install tinyplay.1 $(DESTDIR)$(MANDIR)/man1/
install tinycap.1 $(DESTDIR)$(MANDIR)/man1/
install tinymix.1 $(DESTDIR)$(MANDIR)/man1/
install tinypcminfo.1 $(DESTDIR)$(MANDIR)/man1/
离线
晕哥 说:按上面的方法是动态链接tinyalsa,
下面这样可以手动静态链接:
cd tinyalsa/utils
arm-linux-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static晕哥,上面几行代码是在Makefile上面加吗,要在那个位置加呢
下面是utils下的Makefile文件
DESTDIR ?=
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/manCROSS_COMPILE ?=
CC = $(CROSS_COMPILE)gccCFLAGS += -Wall -Wextra -Werror -Wfatal-errors
CFLAGS += -I ../include
CFLAGS += -L ../src
CFLAGS += -O2VPATH = ../src:../include/tinyalsa
.PHONY: all
all: -ltinyalsa tinyplay tinycap tinymix tinypcminfotinyplay: tinyplay.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinycap: tinycap.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinymix: tinymix.c pcm.h mixer.h asoundlib.h libtinyalsa.a
tinypcminfo: tinypcminfo.c pcm.h mixer.h asoundlib.h libtinyalsa.a.PHONY: clean
clean:
rm -f tinyplay tinycap
rm -f tinymix
rm -f tinypcminfo.PHONY: install
install: tinyplay tinycap tinymix tinypcminfo
install -d $(DESTDIR)$(BINDIR)
install tinyplay $(DESTDIR)$(BINDIR)/
install tinycap $(DESTDIR)$(BINDIR)/
install tinymix $(DESTDIR)$(BINDIR)/
install tinypcminfo $(DESTDIR)$(BINDIR)/
install -d $(DESTDIR)$(MANDIR)/man1
install tinyplay.1 $(DESTDIR)$(MANDIR)/man1/
install tinycap.1 $(DESTDIR)$(MANDIR)/man1/
install tinymix.1 $(DESTDIR)$(MANDIR)/man1/
install tinypcminfo.1 $(DESTDIR)$(MANDIR)/man1/
晕哥,我明白了直接进入tinyalsa/utils
输入以下三行命令就行了
arm-linux-gnueabihf-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
arm-linux-gnueabihf-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
arm-linux-gnueabihf-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
离线
对, 是的。
晕哥,编译出来的tinyplay出错,播放不了wav,是什么问题呢?
# ./tinyplay 14_00.wav
failed to open for pcm 0,0
离线
晕哥 说:对, 是的。
晕哥,编译出来的tinyplay出错,播放不了wav,是什么问题呢?
# ./tinyplay 14_00.wav
failed to open for pcm 0,0
# ./tinymix set 1 63
# ./tinymix set 2 1
# ./tinymix contents
Number of controls: 13
ctl type num name value
0 INT 1 DAC Playback Volume 63 (range 0->63)
1 INT 1 Headphone Playback Volume 63 (range 0->63)
2 BOOL 2 Headphone Playback Switch On, On
3 INT 1 Mic1 Playback Volume 3 (range 0->7)
4 INT 1 Mic1 Boost Volume 4 (range 0->7)
5 INT 1 ADC Gain Capture Volume 3 (range 0->7)
6 BOOL 2 DAC Playback Switch Off, Off
7 BOOL 2 DAC Reversed Playback Switch Off, Off
8 BOOL 2 Mic1 Playback Switch Off, Off
9 BOOL 2 Mixer Capture Switch Off, Off
10 BOOL 2 Mixer Reversed Capture Switch Off, Off
11 BOOL 2 Mic1 Capture Switch Off, Off
12 ENUM 2 Headphone Source Playback Route , DACMixer, , DACMixer
# ./tinyplay 14_00.wav
failed to open for pcm 0,0
离线
你用哪个内核?
离线
你用哪个内核?
daydayup哥,用的4.13y内枋,有些wav文件可以打开,好像什么wav.mp3文件2 ch, 48000 hz, 16 bit声音不对
# ls
1.mp3 RECORD.WAV TESTP.WAV kok tinymix
14_00.wav RECORD2.WAV TESTP2.WAV qt4.sh tinypcminfo
2.mp3 RECORD22.WAV aa.avi qt4.sh.bak tinyplay
22.PCM TEST5.WAV analogclock test.wav
OUT.PCM TEST6.WAV bb.tft tinycap
# ./tinyplay TEST5.WAV
playing 'TEST5.WAV': 2 ch, 48000 hz, 16 bit
# ./tinyplay TEST5.WAV
playing 'TEST5.WAV': 2 ch, 48000 hz, 16 bit
# ./tinyplay TEST6.WAV
playing 'TEST6.WAV': 2 ch, 48000 hz, 16 bit
# ./tinyplay 1.mp3
playing '1.mp3': 2 ch, 48000 hz, 16 bit
^C# ^C
# ./tinyplay 2.mp3
playing '2.mp3': 2 ch, 48000 hz, 16 bit
^C# ^C
# ./tinyplay RECORD2.WAV
playing 'RECORD2.WAV': 2 ch, 48000 hz, 16 bit
# ./tinyplay RECORD22.WAV
playing 'RECORD22.WAV': 2 ch, 48000 hz, 16 bit
# ./tinyplay 14_00.wav
failed to open for pcm 0,0
离线
tinyplay 不能播放mp3文件, 只能播放wav文件.
mp3要用madplay等解码才能播放。
晕哥,编译出来的tinyplay出错,有些wav播放不了电脑可以播放,有些wav可以可以播放但声音不对,能播放的wav都是输出 2 ch, 48000 hz, 16 bit,声音不对,是什么问题呢?
# ./tinyplay 14_00.wav
failed to open for pcm 0,0
离线
到底是什么格式能放, 什么格式不能放?
晕哥,wav不能放,提示failed to open for pcm 0,0 但电脑上可以放
# ./tinyplay 14_00.wav
failed to open for pcm 0,
离线
我看了一下源码utils/tinyplay.c
在这里出错 pcm_is_ready,
看来是驱动问题,
你的内核是不是 4.13-y ?
晕哥,内核是 4.13-y 的
离线
晕哥我想问一下,通过这些编译出来的tinymix指令修改音频通道,但是每次重新开机之后,又恢复初始状态了,那怎么办了。是不是要修改源代码
离线
Lusien4 说:晕哥我想问一下,通过这些编译出来的tinymix指令修改音频通道,但是每次重新开机之后,又恢复初始状态了,那怎么办了。是不是要修改源代码
开机脚本, 自动执行tinymix
谢谢晕哥,我现在的处理办法就是用开机脚本,最开始我把service设置成oneshot,后来看日志发现每次平板发出声音,就又会回到最初的状态,所以我把oneshot去掉了,现在这个service就是频繁开启关闭,目的是达到了,但不知道长时间运行后会不会造成死机,或者对功耗产生影响。所以想看能不能从源代码里入手。
离线
晕哥 说:Lusien4 说:晕哥我想问一下,通过这些编译出来的tinymix指令修改音频通道,但是每次重新开机之后,又恢复初始状态了,那怎么办了。是不是要修改源代码
开机脚本, 自动执行tinymix
谢谢晕哥,我现在的处理办法就是用开机脚本,最开始我把service设置成oneshot,后来看日志发现每次平板发出声音,就又会回到最初的状态,所以我把oneshot去掉了,现在这个service就是频繁开启关闭,目的是达到了,但不知道长时间运行后会不会造成死机,或者对功耗产生影响。所以想看能不能从源代码里入手。
应该是可以的, 把驱动里面这几个寄存器的默认值调一下估计问题不大了。
在线
tinyalsa得安装有点麻烦,还是debian文件系统好用,apt一键安装
离线
按上面的方法是动态链接tinyalsa,
下面这样可以手动静态链接:
cd tinyalsa/utils
arm-linux-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
arm-linux-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
arm-linux-gnueabihf-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: 找不到 -ltinyalsa
collect2: 错误: ld 返回 1
编译报错了
离线
为什么我的用mplayer播放mp3只有一边耳机响?你们的也是这样的吗?我内核是4.13-y
离线
为什么我的用mplayer播放mp3只有一边耳机响?你们的也是这样的吗?我内核是4.13-y
自己解决了,原来./tinymix set 2 1只打开了单声道,./tinymix set 2 1 1这样才是打开双声道。
离线
~/linux/tinyalsa/utils$ arm-linux-gnueabihf-gcc -o tinypcminfo tinypcminfo.c -ltinyalsa -L../src -I../include -static
../src/libtinyalsa.a: 无法添加符号: 不可识别的文件格式
collect2: error: ld returned 1 exit status
~/linux/tinyalsa/utils$ arm-linux-gnueabihf-gcc -o tinymix tinymix.c -ltinyalsa -L../src -I../include -static
../src/libtinyalsa.a: 无法添加符号: 不可识别的文件格式
collect2: error: ld returned 1 exit status
~/linux/tinyalsa/utils$ arm-linux-gnueabihf-gcc -o tinyplay tinyplay.c -ltinyalsa -L../src -I../include -static
报错了,有人遇到吗?
离线
@leefei
我也碰到了,后来make clean后,之后不知道怎么再make就好了
离线
$ aplay ymxl.wav
Playing WAVE 'ymxl.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
$ ./utils/tinyplay ymxl.wav
failed to open for pcm 0,0
奇怪了,ubuntu 18也是这样。
离线
$ aplay ymxl.wav
Playing WAVE 'ymxl.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo$ ./utils/tinyplay ymxl.wav
failed to open for pcm 0,0奇怪了,ubuntu 18也是这样。
./utils/tinyplay /dev/urandom
playing '/dev/urandom': 2 ch, 48000 hz, 16 bit
./utils/tinyplay /dev/zero
playing '/dev/urandom': 2 ch, 48000 hz, 16 bit
奇怪,播放这些设备却是正常的。
离线
@yixiuge
搞定了,tinyalsa 1.0.2 提示明显一些:
./utils/tinyplay test.wav
Unable to open PCM device 0 (cannot set hw params: Invalid argument)
我在想是不是不能设置44100采样率问题
果然,找了一首 48000的 wav搞定:
./utils/tinyplay test48000.wav
Playing sample: 2 ch, 48000 hz, 16 bit
完全OK!
离线
@yixiuge
./utils/tinyplay /dev/urandom -r 6000 -i raw
./utils/tinyplay /dev/urandom -r 12000 -i raw
./utils/tinyplay /dev/urandom -r 24000 -i raw
./utils/tinyplay /dev/urandom -r 48000 -i raw
ubuntu 18.04 这几个测试OK,其他的采样率都不行。
离线
@yixiuge
./utils/tinyplay /dev/urandom -r 6000 -i raw
./utils/tinyplay /dev/urandom -r 12000 -i raw
./utils/tinyplay /dev/urandom -r 24000 -i raw
./utils/tinyplay /dev/urandom -r 48000 -i rawubuntu 18.04 这几个测试OK,其他的采样率都不行。
$ tinyplay /dev/urandom -r 44100
failed to open for pcm 0,0
好奇试了一下,果然是 。。。
离线