主题 : 灰常灰常简单的终端下的音量控制 复制链接 | 浏览器收藏 | 打印
fy0
级别: 新手上路
UID: 11562
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2009-12-11
最后登录: 2017-07-21
楼主  发表于: 2010-08-29 01:07

 灰常灰常简单的终端下的音量控制

音量控制
用法:volctrl a b
a b分别为左右声道的音量,范围0-100

编译命令:arm-linux-gcc volctrl.c -o volctrl

-------------------------
效果:
[root /sdcard]# ./volctrl 50 50  
Volume :L 100 R 100
Changed:L 50 R 50

由于缺少,就随手写了个。代码直接借用以前帖子的略加修改。
PC机音量分左右,板子上则不分(现在看来是取最低的一个)。
以下代码保存为C文件直接编译。

复制代码
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <sys/ioctl.h>
  6. #include <linux/soundcard.h>
  7. main (int argc, char* argv[])
  8. {
  9.   int MIX_FD;
  10.   int iLeft=0;
  11.   int iRight=0;
  12.   int iLevel = 0;
  13.   MIX_FD = open ("/dev/mixer", O_WRONLY);
  14.   if (MIX_FD == -1)
  15.     {
  16.       perror ("Error:open /dev/mixer error");
  17.       return 0;
  18.     }
  19.   ioctl(MIX_FD, MIXER_READ(SOUND_MIXER_VOLUME), &iLevel);
  20.   printf("Volume :L %i R %i\n",iLevel >> 8,iLevel - (iLevel >> 8)*256);
  21.   if (argc>=3)
  22.   {
  23.      iLeft = atoi(argv[1]);
  24.      iRight = atoi(argv[2]);
  25.      iLevel = (iRight << 8) + iLeft;
  26.      printf("Changed:L %i R %i \n",iLeft,iRight);
  27.      if (ioctl(MIX_FD, MIXER_WRITE(SOUND_MIXER_VOLUME), &iLevel)==-1)
  28.       {
  29.         perror ("Error:MIXER_WRITE ioctl failed");
  30.       }
  31.   }
  32.   close (MIX_FD);
  33.   return 0;
  34. }


附件为可执行程序

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

无意中翻到老帖子,看到楼下有人说我骗人……
你们看下发帖日期和板块好不好,当时6410还没出来,这是for2440的。
[ 此帖被fy0在2012-01-22 17:06重新编辑 ]
附件: volctrl.rar (6 K) 下载次数:19
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2010-08-29 08:16
多谢分享
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2010-08-29 08:26
好,看起来可以适用于oss或者兼容oss的alsa驱动
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
allan3388
级别: 新手上路
UID: 37312
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-02-02
最后登录: 2012-12-05
3楼  发表于: 2011-02-02 06:16
謝謝樓主大大的分享
级别: 新手上路
UID: 28541
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2010-09-13
最后登录: 2011-04-27
4楼  发表于: 2011-03-22 11:16
这个要怎么运行呢?我在mini6410上运行了,没有效果啊,./volctrl 1 1 和./volctrl 100 100没有任何区别呀
级别: 新手上路
UID: 28541
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2010-09-13
最后登录: 2011-04-27
5楼  发表于: 2011-03-31 16:56
我也试过,没有任何区别
级别: 新手上路
UID: 54364
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2011-08-29
最后登录: 2016-06-28
6楼  发表于: 2011-09-05 11:33
骗人吧