开发板:mini2440
操作系统:Linux2.4
IDE:Qt Creator
在做音乐播放器的过程中,移植MPlayer10rc2到mini2440开发板上,碰到MPlayer无法控制音量大小,使用0和9来控制音量都将导致播放的声音为0。以下为原因分析:
1,
当使用默认的OSS驱动播放的时候,提示:
Requested audio codec family [mp3] (afm=mp3lib) not available.音乐还是照常播放。当使用“volume 100”来设置音量时,无论设置的音量值是多少,都会提示如下:
Volume:0%
分析:目前还不知道是不是我的开发环境出了问题。2,
当使用ALSA驱动播放时,提示:
Could not open/initialize audio device -> no sound.音乐无法播放。
在开发板上查看到mini2440有配置ALSA驱动
ALSA device list:
#0: S3C24XX_UDA134X (UDA134X)
但是当使用如下命令查看MPlayer配置的音频驱动情况,却是没有配置ALSA驱动
[root@FriendlyARM /]# mplayer -ao help
MPlayer 1.0rc2-4.3.2 (C) 2000-2007 MPlayer Team
CPU: ARM
Available audio output drivers:
oss OSS/ioctl audio output
mpegpes DVB audio output
v4l2 V4L2 MPEG Audio Decoder output
null Null audio output
pcm RAW PCM/WAVE file writer audio output分析:该问题或许是在配置MPlayer的时候没有加入ALSA驱动。解决办法是重新配置,编译,移植MPlayer。
3,
最直接的办法是读写设备文件/dev/mixer来控制音量,代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/soundcard.h>
int main(int argc, char* argv[])
{
int set_volume = 0;
int get_volume = 0;
int fd = 0;
int status = 0;
fd = open("/dev/mixer", O_RDWR);
if(fd == -1)
{
printf("open /dev/mixer error!\n");
close(fd);
exit(1);
}
//get volume value about system volume
if((argc == 2) && (!(strcmp("get_volume", argv[1]))))
{
status = ioctl(fd, SOUND_MIXER_READ_VOLUME, &get_volume);
if(status == -1)
{
printf("get volume value from /dev/mixer error!\n");
exit(1);
}
get_volume = get_volume/257; //因为输出的值都是以257的倍数出现
printf("get_volume = %d\n", get_volume);
close(fd);
return 0;
}
//set volume value to system
else if((argc == 3) && (!(strcmp("set_volume", argv[1]))) &&
(0<=atoi(argv[2])) && (atoi(argv[2])<=100))
{
set_volume = atoi(argv[2]);
status = ioctl(fd, SOUND_MIXER_WRITE_VOLUME, &set_volume);
if(status == -1)
{
printf("write volume value to /dev/mixer error!\n");
exit(1);
}
close(fd);
return 0;
}
else
{
printf("Usage:%s set_volume [0~100]\n",argv[0]);
printf("Usage:%s get_volume\n", argv[0]);
close(fd);
exit(1);
}
}
第3种办法经过测试可行
本文详细分析了在mini2440开发板上使用MPlayer播放器遇到的音量控制问题,包括OSS驱动与ALSA驱动的配置错误,以及通过读写设备文件/dev/mixer实现音量控制的方法。通过重新配置、编译和移植MPlayer,最终解决了音量无法调整的问题。
3561

被折叠的 条评论
为什么被折叠?



