精华内容
下载资源
问答
  • madplay播放器——用按键控制音量

    千次阅读 2017-05-09 22:13:01
     一文中实现了用按键控制madplay播放器,但是由于我们的开发板只有四个按键,所以并未添加控制音量的函数,所以,今天我们来编程实现用按键对播放器音量进行控制。   不同于我们在开发板上用mixer直接设置音量...

    今日诗词欣赏:

                               晏殊 《蝶恋花》

      槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去。明月不谙离别苦,斜光到晓穿朱户。

      昨夜西风凋碧树,独上高楼,望尽天涯路。欲寄彩笺兼尺素,山长水阔知何处。

    ==========================================================================

    主机操作系统:Centos 6.7 
    交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
    开发板平台: fl2440 
    Linux内核版本: linux-3.0 .54

    声卡:uda1341(音频编程接口:ALSA)
    播放器:madplay

    ==========================================================================

               之前我们http://blog.csdn.net/qicheng777/article/details/71082348 一文中实现了用按键控制madplay播放器,但是由于我们的开发板只有四个按键,所以并未添加控制音量的函数,所以,今天我们来编程实现用按键对播放器音量进行控制。

        不同于我们在开发板上用mixer直接设置音量,用程序控制可以实现在播放歌曲的时候随意更改当前音量大小。

     

    一、设置音量函数:  

        给函数传一个值voice,这个值就是设置的当前增益。   

    void volume(int voice)
    {
        int MIX_FD;             //定义文件描述符
        int iLeft = voice;      //左声道增益
        int iRight = voice;     //右声道增益
        int iLevel;
        iLevel = (iRight << 8) + iLeft;   //
    
        MIX_FD= open("/dev/mixer", O_WRONLY);   //只写方式打开混音器
        if (MIX_FD == -1) {
            perror("Error:open /dev/mixer error");
            exit(1);
        }
        
    	/*设置混音通道增益*/
        if (ioctl(MIX_FD, MIXER_WRITE(SOUND_MIXER_VOLUME), &iLevel) == -1) {  
            perror("Error:MIXER_WRITE ioctl failed");
            exit(1);
        }
        
    	/*读取混音通道增益*/
        if (ioctl(MIX_FD, MIXER_READ(SOUND_MIXER_VOLUME), &iLevel) == -1) {   
            perror("Error:MIXER_WRITE ioctl failed");
            exit(1);
        } 
        close(MIX_FD);
    }
        这个函数很简单,主要是要知道如何通过ioctl来控制mixer混音器,之前也对混音器相关操作进行了总结,可参考:
    http://blog.csdn.net/qicheng777/article/details/71368101     

        

    二、修改主函数:

       为了简便,我把之前关于播放器的其他操作(比如暂停,上一曲等等)以及控制音量的函数都封装在一个头文件(hand_play.h)中了,主函数可直接调用。

    /*********************************************************************************
     *      Copyright:  (C) 2017 qicheng
     *                  All rights reserved.
     *
     *       Filename:  bbb.c
     *    Description:  This file 
     *                 
     *        Version:  1.0.0(04/27/2017)
     *         Author:  yangni <497049229@qq.com>
     *      ChangeLog:  1, Release initial version on "04/27/2017 07:49:28 PM"
     *                 
     ********************************************************************************/
    #include <stdlib.h>
    #include "hand_play.h"
    
    int main(void)
    {
        int buttons_fd;
        int key_value;
        struct song *head;
    
       
        /*初始音量*/
        static int vol=50;   //这里定义了必须是一个静态变量
    
        volume(vol);
        /*打开设备文件*/
        buttons_fd = open("/dev/button", 0);
        if (buttons_fd < 0) {
            perror("open device buttons");
            exit(1);
        }
    
    
      /*创建播放列表*/
        head = creat_song_list();
        printf("===================================OPTION=======================================\n\n\n\n");
        printf("        K1:START/PAUSE     K2:STOP   K3:NEXT      K4:PRIOR\n\n\n\n");
        printf("================================================================================\n");
    
    
      /*共享内存:用于存放子进程ID,播放列表位置*/
        if((shmid = shmget(IPC_PRIVATE,5,PERM))== -1)
            exit(1);
        p_addr = shmat(shmid,0,0);
        memset(p_addr,'\0',1024);
        
        
        while(1) 
        {
            fd_set rds;
            int ret;
    
            FD_ZERO(&rds);
            FD_SET(buttons_fd, &rds);
    
            /*监听获取键值*/
            ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL);
            if (ret < 0) 
            {
                perror("select");
                exit(1);
            }
            if (ret == 0) 
                printf("Timeout.\n");
            else if (FD_ISSET(buttons_fd, &rds))
            {
                int ret = read(buttons_fd, &key_value, sizeof key_value);
                if (ret != sizeof key_value) 
                {
                    if (errno != EAGAIN)
                        perror("read buttons\n");
                    continue;
                } 
                else
                {
                    //printf("buttons_value: %d\n", key_value+1);
                    
                    /*首次播放,必须是按键1*/
                    if(first_key){
                        switch(key_value)
                        {   
                        case KEY_1:
                            startplay(&pid,head);
                            first_key=0;
                            break;
                        case KEY_2:
                        case KEY_3:
                        case KEY_4:
                            printf("=======================PRESS K1 TO START PLAY===================\n");
                            break;
                        default:
                            printf("=======================PRESS K1 TO START PLAY===================\n");
                            break;
                        } //end switch
                    }//end if(first_key)
                    /*若不是首次播放,则根据不同键值处理*/
                    else if(!first_key){
                        switch(key_value)
                        {
                        case KEY_1:
                            //printf("play_flag:%d\n",play_flag);
                            if(play_flag)
                                my_pause(gradchild);
                            else
                                conti_play(gradchild);
                            break;
                        case KEY_2:
                            next(gradchild);
                            break;
                        case KEY_3:
                            /*减小音量*/
                            while(vol>0)
                            {
                                vol-=10;       //每按键一次减10
                                volume(vol);   //调用刚才我们写的函数设置音量
                                break; 
                            }
                            break;
                        case KEY_4:
                           /*增大音量*/
                            while(vol<120)
                            {   
                                vol+=10;
                                volume(vol);   //调用函数
                                break;
                            }
                            break;
                        } //end switch
                    }//end if(!first_key)
    
                }
                    
            }
        }
    
        close(buttons_fd);
        return 0;
    }
    
    

       主函数中,定义音量的变量一定要是 静态变量,这样才能保证这个值不被重新初始化。然后在while循环中,一定要用break直接跳出函数。



    展开全文
  • madplay

    千次阅读 2018-12-12 15:42:47
    1.madplay-0.15.2b.tar.gz 2.libmad-0.15.1b.tar.gz 3 libid3tag-0.15.1b.tar.gz  方法是:./configure sudo make sudo make install prefix = /usr/local 中prefix 为make install的安装目录,默认在/usr/loacl ...

    1.先安装
    1.madplay-0.15.2b.tar.gz
    2.libmad-0.15.1b.tar.gz
    3 libid3tag-0.15.1b.tar.gz
     方法是:./configure  sudo make sudo make install
    prefix = /usr/local  中prefix 为make install的安装目录,默认在/usr/loacl
    如果希望安装到其他目录
    ./configure --prefix=/安装目录路径
    4.执行madplay 播放mp3
    先加载动态库 :如
    export LD_LIBRARY_PATH=/usr/local/lib
    播放mp3
        ./madplay 1.mp3 2.mp3 3.mp3 
    madpay功能很强求,可以实现多个节目循环播放,快进拖动播放,暂停,恢复,支持wav等格式输出等。
    目前madplay还不支持网络播放.不过mp123支持网络播放。
    madplay使用方法: 传入打印既可以使用短传入(-n ),也可以使用长传入(--abc),二者等效,下面只讲短传入
    -v  获取播放时间
    -q  不存在任何打印,但现实警告
    -Q  不存在任何打印
    --downsample  只采用一半数据
    -i  忽略CRC校验错误
    -o PATH/xx.wav 可以用来转码,将mp3转为wav
      也可以是其他格式,见说明;.raw  表示是元素pcm,.hex等
    -a 开启衰减音量 ,增加音量,衰减系统为-175~+18    (当然通过键盘+ —也可以调整音量)
    -A 同-a
    -1 -2 -m -S 分别指左声道,右声道,双声道,立体声
    -s  用于seek播放 如:0:1:20:11 ,seek到1小时,2分钟,11秒时开始播放
    -t  用于播放时间现在  0:1:20:11 ,播放到1小时,2分钟,11秒时就停止
    -z  用于随机播放列表
    -r, --repeat[=MAX]   循环播放无限次或Max次 
    --tty-control            enable keyboard controls  默认是使能热键
    --no-tty-control         disable keyboard controls
    热键使用
    下一首歌曲; f,或ctrl+n 或者>
    上一首歌曲  b ,或ctrl+p 或者<
    退出:q, Q,获取ctrl+c
    获取播放状态信息: i  ?
    调节音量: - + _ =
    暂停恢复:p
    停止:s
    Usage: ./madplay [OPTIONS] FILE [...]
    Decode and play MPEG audio FILE(s).


    Verbosity:
      -v, --verbose                show status while decoding
      -q, --quiet                  be quiet but show warnings
      -Q, --very-quiet             be quiet and do not show warnings
          --display-time=MODE      use default verbose time display MODE
                                     (remaining, current, overall)


    Decoding:
          --downsample             reduce sample rate 2:1
      -i, --ignore-crc             ignore CRC errors
          --ancillary-output=PATH  write ancillary data to PATH


    Audio output:
      -o, --output=[TYPE:]PATH     write output to PATH with format TYPE (below)
      -b, --bit-depth=DEPTH        request DEPTH bits per sample
      -R, --sample-rate=HERTZ      request HERTZ samples per second
      -d, --no-dither              do not dither output PCM samples
          --fade-in[=DURATION]     fade-in songs over DURATION (default 0:05)
      -a, --attenuate=DECIBELS     attenuate signal by DECIBELS (-)
      -a, --amplify=DECIBELS       amplify signal by DECIBELS (+)
      -A, --adjust-volume=DECIBELS override per-file volume adjustments
      -G, --replay-gain[=PROFILE]  enable Replay Gain volume adjustments using
                                     PROFILE (radio, audiophile)


    Channel selection:
      -1, --left                   output first (left) channel only
      -2, --right                  output second (right) channel only
      -m, --mono                   mix left and right channels for monaural output
      -S, --stereo                 force stereo output


    Playback:
      -s, --start=TIME             skip to begin at TIME (HH:MM:SS.DDD)
      -t, --time=DURATION          play only for DURATION (HH:MM:SS.DDD)
      -z, --shuffle                randomize file list
      -r, --repeat[=MAX]           play files MAX times, or indefinitely
          --tty-control            enable keyboard controls
          --no-tty-control         disable keyboard controls


    Miscellaneous:
      -T, --show-tags-only         show ID3/encoder tags only (do not decode)
      -V, --version                display version number and exit
          --license                show copyright/license message and exit
      -h, --help                   display this help and exit


    Supported output formats:
      cdda    CD audio, 16-bit big-endian 44100 Hz stereo PCM (*.cdr, *.cda)
      aiff    Audio IFF, [16-bit] PCM (*.aif, *.aiff)
      wave    Microsoft RIFF/WAVE, [16-bit] PCM (*.wav)
      snd     Sun/NeXT audio, 8-bit ISDN mu-law (*.au, *.snd)
      raw     binary [16-bit] host-endian linear PCM
      hex     ASCII hexadecimal [24-bit] linear PCM

      null    no output (decode only)

    实际项目中可以将该应用封装成一个库(将main函数封装成一个接口)提供给上层用,而热键动作,可以创建一个读按键线程,或者另一个播放器发消息来控制动作,完成对播放器的控制。输出要根据平台不同,将pcm摔倒不同驱动中。

    展开全文
  • madplay 命令

    千次阅读 2016-12-12 14:03:11
    1.madplay-0.15.2b.tar.gz 2.libmad-0.15.1b.tar.gz 3 libid3tag-0.15.1b.tar.gz  方法是:./configure sudo make sudo make install prefix = /usr/local 中prefix 为make install的安装目录,默认在/usr/...
    1.先安装
    
    1.madplay-0.15.2b.tar.gz
    2.libmad-0.15.1b.tar.gz
    3 libid3tag-0.15.1b.tar.gz
     方法是:./configure  sudo make sudo make install
    prefix = /usr/local  中prefix 为make install的安装目录,默认在/usr/loacl
    如果希望安装到其他目录
    ./configure --prefix=/安装目录路径
    4.执行madplay 播放mp3
    先加载动态库 :如
    export LD_LIBRARY_PATH=/usr/local/lib
    播放mp3
        ./madplay 1.mp3 2.mp3 3.mp3 
    madpay功能很强求,可以实现多个节目循环播放,快进拖动播放,暂停,恢复,支持wav等格式输出等。
    目前madplay还不支持网络播放.不过mp123支持网络播放。
    madplay使用方法: 传入打印既可以使用短传入(-n ),也可以使用长传入(--abc),二者等效,下面只讲短传入
    -v  获取播放时间
    -q  不存在任何打印,但现实警告
    -Q  不存在任何打印
    --downsample  只采用一半数据
    -i  忽略CRC校验错误
    -o PATH/xx.wav 可以用来转码,将mp3转为wav
      也可以是其他格式,见说明;.raw  表示是元素pcm,.hex等
    -a 开启衰减音量 ,增加音量,衰减系统为-175~+18    (当然通过键盘+ —也可以调整音量)
    -A 同-a
    -1 -2 -m -S 分别指左声道,右声道,双声道,立体声
    -s  用于seek播放 如:0:1:20:11 ,seek到1小时,2分钟,11秒时开始播放
    -t  用于播放时间现在  0:1:20:11 ,播放到1小时,2分钟,11秒时就停止
    -z  用于随机播放列表
    -r, --repeat[=MAX]   循环播放无限次或Max次 
    --tty-control            enable keyboard controls  默认是使能热键
    --no-tty-control         disable keyboard controls
    热键使用
    下一首歌曲; f,或ctrl+n 或者>
    上一首歌曲  b ,或ctrl+p 或者<
    退出:q, Q,获取ctrl+c
    获取播放状态信息: i  ?
    调节音量: - + _ =
    暂停恢复:p
    停止:s
    Usage: ./madplay [OPTIONS] FILE [...]
    Decode and play MPEG audio FILE(s).


    Verbosity:
      -v, --verbose                show status while decoding
      -q, --quiet                  be quiet but show warnings
      -Q, --very-quiet             be quiet and do not show warnings
          --display-time=MODE      use default verbose time display MODE
                                     (remaining, current, overall)


    Decoding:
          --downsample             reduce sample rate 2:1
      -i, --ignore-crc             ignore CRC errors
          --ancillary-output=PATH  write ancillary data to PATH


    Audio output:
      -o, --output=[TYPE:]PATH     write output to PATH with format TYPE (below)
      -b, --bit-depth=DEPTH        request DEPTH bits per sample
      -R, --sample-rate=HERTZ      request HERTZ samples per second
      -d, --no-dither              do not dither output PCM samples
          --fade-in[=DURATION]     fade-in songs over DURATION (default 0:05)
      -a, --attenuate=DECIBELS     attenuate signal by DECIBELS (-)
      -a, --amplify=DECIBELS       amplify signal by DECIBELS (+)
      -A, --adjust-volume=DECIBELS override per-file volume adjustments
      -G, --replay-gain[=PROFILE]  enable Replay Gain volume adjustments using
                                     PROFILE (radio, audiophile)


    Channel selection:
      -1, --left                   output first (left) channel only
      -2, --right                  output second (right) channel only
      -m, --mono                   mix left and right channels for monaural output
      -S, --stereo                 force stereo output


    Playback:
      -s, --start=TIME             skip to begin at TIME (HH:MM:SS.DDD)
      -t, --time=DURATION          play only for DURATION (HH:MM:SS.DDD)
      -z, --shuffle                randomize file list
      -r, --repeat[=MAX]           play files MAX times, or indefinitely
          --tty-control            enable keyboard controls
          --no-tty-control         disable keyboard controls


    Miscellaneous:
      -T, --show-tags-only         show ID3/encoder tags only (do not decode)
      -V, --version                display version number and exit
          --license                show copyright/license message and exit
      -h, --help                   display this help and exit


    Supported output formats:
      cdda    CD audio, 16-bit big-endian 44100 Hz stereo PCM (*.cdr, *.cda)
      aiff    Audio IFF, [16-bit] PCM (*.aif, *.aiff)
      wave    Microsoft RIFF/WAVE, [16-bit] PCM (*.wav)
      snd     Sun/NeXT audio, 8-bit ISDN mu-law (*.au, *.snd)
      raw     binary [16-bit] host-endian linear PCM
      hex     ASCII hexadecimal [24-bit] linear PCM

      null    no output (decode only)

    实际项目中可以将该应用封装成一个库(将main函数封装成一个接口)提供给上层用,而热键动作,可以创建一个读按键线程,或者另一个播放器发消息来控制动作,完成对播放器的控制。输出要根据平台不同,将pcm摔倒不同驱动中。

    展开全文
  • madplay的使用方法嵌入式(重要),MP3解码器的命令操作模式
  • MP3Player_madplay.zip

    2020-01-05 13:41:27
    基于嵌入式Linux实现Mp3播放器,具有选择歌曲目录,上下曲切换,暂停,退出,调节音量的功能,具有进度条显示的功能
  • madplay 常用命令linux(system)

    千次阅读 2018-07-13 17:09:07
    //-a 音量控制 范围(-175~+18) 循环播放system("madplay XXX.mp3 -r &amp;");//循环播放:参数-r 恢复播放system("killall -CONT madplay &amp;"); 暂停播放system("killall ...

    播放
    system("madplay -a -10 xxx.mp3");//-a 音量控制 范围(-175~+18

     

    循环播放

    system("madplay  XXX.mp3 -r &");//循环播放:参数-r

     

    恢复播放

    system("killall -CONT madplay &");

     

    暂停播放
    system("killall -STOP madplay &");

     

    停止

    system("killall madplay");

     

    madplay终止

    system("killall -9 madplay");


    展开全文
  • madplay源代码导读

    千次阅读 2014-03-06 22:56:40
    1. madplay基于libmad的基础上做了一个播放器,该播放器除了目前不支持网络播放以为,其余功能都支持。如快进播放,seek播放,暂停,恢复等 int main(int argc, char *argv[]) //后续如果做二次开发的话,可以将...
  • 该系统可实现:播放、暂停、继续、停止、上一首、下一首、音量调节及退出等功能。 用madplay库实现一个简单的音乐播放器,可以播放本地的音频文件并具备基本的音乐操作处理功能 主菜单效果图: 函数相应功能 ...
  • madplay命令使用(Linux音乐播放器)

    千次阅读 2020-08-01 11:10:55
    本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。...-a 开启衰减音量 ,增加音量,衰减系统为-175~+18 (当然通过键盘±也可以调整音量) -A 同-
  • madplay的使用方法

    千次阅读 2013-12-02 09:12:28
    管理madplay的主程序,包括播放,暂停播放,恢复播放,停止播放 system("madplay north.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐 system("madplay north.mp3 -r &");//循环播放:参数-r system(...
  • qt下的madplay播放器

    2014-02-17 14:08:31
    利用Qt4实现的前台界面,madplay实现的后台播放器,下面的笔记简要说明了实现方式。 点击打开链接    1. main.cpp 文件   #include #include"audio_player.h" #include #include   int main(int argc, char...
  • 学习目标:1. WM9876接口和工作原理;2. WM9876驱动移植;3. WM9876应用测试;4. 问题总结 ...WM9876声卡是负责录音、播音、调节音量和声音合成等的一种多媒体板卡。包括两种接口:IIS接口(提供音...
  • 1.madplay-0.15.2b.tar.gz 2.libmad-0.15.1b.tar.gz 3 libid3tag-0.15.1b.tar.gz  方法是:./configure sudo make sudo make install prefix = /usr/local 中prefix 为make install的安装目录,默认在/usr/...
  • 应用中使用system调用madplay播放音频后,无法直接控制暂停/停止等操作,百度上一搜方法全是是直接对madplay进程进行控制,"killall -19 madplay"使进程挂起以暂停,"killall -18 madplay"使进程恢复运行,...
  • 软件功能 播放/暂停/继续/停止/上一首/下一首/音量增/音量减 目前已经实现了播放功能, 但是实习不了其他功能, 以下是代码 ********************************************************** T-Car.pro ----------...
  • madplay的主程序,包括播放,暂停播放,恢复播放,停止播放 system("madplay north.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐 system("madplay north.mp3 -r &");//循环播放:参数-r ...
  • 小度路由madplay和mpd本地音乐播放器

    千次阅读 2014-09-11 22:11:46
    调节音量 : - + _ = 暂停恢复: p 停止 :s 【 mpd 】 添加 mpd-full 播放器  Libraries ---><*> libffmpeg-full................................... FFmpeg libraries (full)  ...
  • 本节学习: 分析linux中的OOS声卡系统 修改s3c2410-uda1341.c的控制部分,移植wm8976声卡 使用madplay应用程序播放mp3 ...volume:音量,dsp:数字信号处理(Digital Signal Processing),mixer:混音器,uni...
  • 调节音量: - + _ = 暂停恢复:p 停止:s Usage: ./madplay [OPTIONS] FILE [...] Decode and play MPEG audio FILE(s). Verbosity: -v, --verbose show status while decoding -q, --quiet be quiet but show ...
  • mixer音量的设置:amixer小工具的使用方法
  • 昨天郁闷了一天,音量调节一直无效,在自己的程序,xmms,lib库之间费了好些时间,才将问题定位到liboss插件上,看了看代码没看明白,里面的:void oss_set_volume(int l, int r){ int fd, v/*, cmd, devs*/;...
  • 1.关于alsa-utils和lib的移植我的上一篇博文中已经说明了,下面我就来说说我的混音器mixer音量控制的调节过程,网上的很多方法都是比较基本的入门没有知名具体的操作方法,在此我来谈谈我的设置过程。 关于amixer的...
  • 这是一个比较完善的嵌入式MP3工程,结合madplay,arm,QT等内容实现了歌曲的播放、暂停、上一曲、下一曲、获取歌曲时间、音量调节、通过进度条快进歌曲等功能。结合自己的arm板进行简单的移植就可以使用。
  • 基于uda1340 的 mixer混音器编程实例

    千次阅读 2017-05-07 20:30:11
    模拟信号通过增益控制器和由软件控制的音量调节器后,在不同的混音通道中进行级别(level)调制,然后被送到输入混音器中进行声音的合成。混音器上的电子开关可以控制哪些通道中有信号与混音器相连,有些声卡只允许...
  • 嵌入式音乐播放器

    千次阅读 2018-09-27 19:26:30
    4、实现音量调节(有上限和下限); 通过两个程序控制这个音乐播放器 客户端用来发一些请求就可以了。 服务器端:至少创建三个进程,父进程,子进程阻塞,等待回收孙进程,孙进程负责播放音乐。 父进程:用于监...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

madplay调节音量