精华内容
下载资源
问答
  • tinyalsa

    2017-10-10 21:16:31
    external/tinyalsa
    external/tinyalsa
    
    展开全文
  • evaluate tinyalsa

    2020-12-27 03:50:12
    <div><p>https://github.com/tinyalsa/tinyalsa</p> <p>check if this can be used as an alsa-lib replacement</p><p>该提问来源于开源项目:sabotage-linux/sabotage</p></div>
  • tinyalsa使用

    2018-09-29 14:51:03
    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...   tinyalsa使用 tinymix tinyplay ...tinyalsa使用 ... tinyalsa源码位于android源码目录下external/ti...

     

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ivychend/article/details/78837187

     

     

    tinyalsa使用

      tinyalsa源码位于android源码目录下external/tinyalsa,包含了四个命令,分别是tinymix,tinycap, tinyplay,tinymeminfo和一个库libtinyalsa.so 
      使用mmm命令编译,mmm external/tinyalsa 
      相关目录及文件

    • /dev/snd/ 系统下control设备管理、pcm设备都在此目录下
    • /proc/asound/ 声卡相关信息可以在此目录下找到,命令:cat /proc/asound/cards可以查看系统下所有声卡及其ID
    • /sys/class/sound sys系统下声卡相关的文件结点在此目录下

    1 tinymix

      输入tinymixu会将声卡(不指定的话,默认为0)的所有control打印出来,下面为部分打印

    # tinymix                                    
    Mixer name: 'wm8962-audio'
    Number of controls: 105
    ctl type    num name                                     value
    0   BOOL    2   Input Mixer Switch                       On On
    1   INT 1   MIXINL IN2L Volume                           5
    2   INT 1   MIXINL PGA Volume                            0
    3   INT 1   MIXINL IN3L Volume                           5
    4   INT 1   MIXINR IN2R Volume                           5
    5   INT 1   MIXINR PGA Volume                            0
    6   INT 1   MIXINR IN3R Volume                           7
    7   INT 2   Digital Capture Volume                       108 108
    8   INT 2   Capture Volume                               63 63
    9   BOOL    2   Capture Switch                           Off Off
    10  BOOL    2   Capture ZC Switch                        On On
    11  BOOL    1   Capture HPF Switch                       On
    12  ENUM    1   Capture HPF Mode                         Hi-fi

      每个control都有一个ID,查看具体某个control

    root@sabresd_6dq:/ # tinymix 8                                                 
    Capture Volume: 63 63 (range 0->63)

      改变某个control的值

    root@sabresd_6dq:/ # tinymix 8 "31 31"
    root@sabresd_6dq:/ # tinymix 8                                                 
    Capture Volume: 31 31 (range 0->63)

      查看、修改enum类型的control,tinymix会列出所有control的选项,前面带>号为当前选项

    root@sabresd_6dq:/ # tinymix 15
    Capture LHPF Mode:  >LPF    HPF
    root@sabresd_6dq:/ # tinymix 15 HPF
    root@sabresd_6dq:/ # tinymix 15                                                
    Capture LHPF Mode:  LPF >HPF

      当前有多个声卡时,使用-D选项指定声卡,不指定的话默认为0


    root@sabresd_6dq:/ # tinymix -D 1 
    Mixer name: 'imx-hdmi-soc' 
    Number of controls: 4 
    ctl type num name value 
    0 IEC958 1 IEC958 Playback Default unknown 
    1 INT 1 HDMI Support Channels 2 
    2 INT 3 HDMI Support Rates 32000 44100 48000 
    3 INT 1 HDMI Support Formats 16 

      
     

    2 tinyplay

      tinyplay只能播放wav格式的音频文件 
    tinyplay test.wav

    3 tinycap

      录音格式如下,保存到record.wav 
    tinycap /sdcard/record.wav

    4 tinymeminfo

    展开全文
  • Android Tinyalsa

    千次阅读 2015-05-20 23:11:04
    tinyalsa位于Android源码的external/tinyalsa位置。 关于tinyalsatinyalsa是Google在Android 4.0之后推的基于alsa内核的用户层音频接口。在Android 4.0之前还一直是使用这alsa-lib接口。Google之所以推出...
    tinyalsa位于Android源码的external/tinyalsa位置。

    关于tinyalsa,tinyalsa是Google在Android 4.0之后推的基于alsa内核的用户层音频接口。在Android 4.0之前还一直是使用这alsa-lib接口。Google之所以推出tinyalsa,我认为有可能是因为alsa使用了GPL许可证的缘故,也有可能是因为alsa-lib的库过于复杂繁琐大部分功能在Android平台没有实际实用意义却依然占用屈指可数的内存空间。

    关于alsa在Android中,在Android 4.0及之后只要你愿意还是可以使用原版alsa的,因为内核中依然是使用alsa的驱动,只需要把alsa的用户层接口alsa-lib移植到源码中即可。

    tinyalsa中主要的头文件和数据结构如下,通过ioctrl和内核的alsa驱动交互。



    pcm设备,通过阅读tinyalsa的代码和查看Android下的音频设备节点,可知在Android中一个pcm设备最多可有一个mixer设备"/dev/snd/controlC%u"(一般是controlC0)和32个/dev/snd/pcmC%uD%uc(一般是pcmC0D0c)、/dev/snd/pcmC%uD%u%p(一般是pcmC0D0p),pcm设备中的C代表card,D代表device,c代表capture,p代表playback。当我们新增一个pcm声卡C的值会+1,D还是从0开始,可能只有c(pcmC1D0c 例如麦克风),可能只有p(pcmC1D0p 例如音响),可能同时存在c和p(pcmC1D0c  pcmC1D0p )。

    tinyalsa的对外提供的头文件就我上图提到的一个"asoundlib.h",提供最基础的pcm和mixer操作。实现文件为pcm.c(实现pcm api)和mixer.c(实现mixer api)。根据asoundlib.h编写了四个小工具tinypcminfo tinyplay tinycap tinymix,这四个小工具作为系统命令存放在系统中,可以很方便的使用。tinyasla作为精简版的alsa-lib可能会有人想把它移植到Linux使用,tinyasla依赖的库有libcutils && libutils,如果能把依赖的这两个库的一些方法使用Linux接口实现那么剩下的问题应该不大了吧,这个仅仅是我的猜想。
    tinypcminfo的实现文件tinypcminfo.c (查看pcm设备能力)
    tinyplay的实现文件tinyplay.c(使用pcm设备播放wav格式的音频文件)
    tinycap的实现文件tinycap.c(使用pcm设备采集pcm格式的码流,并保存为wav格式的文件)
    tinymix的实现文件tinymix.c(对pcm设备的控制,包括音量调节、设备切换)
    这几个命令使用时可以先使用tinypcminfo查看pcm设备的能力,要不当我们使用其他三个命令时使用了不合理的配置会出现parameter invalid的错误。

    PCM API
    /* 对pcm设备节点的操作 */
    struct pcm *pcm_open(unsigned int card, unsigned int device, unsigned int flags, struct pcm_config *config);
    int pcm_close(struct pcm *pcm);
    int pcm_is_ready(struct pcm *pcm);
     
    /* 获取pcm设备的能力 */
    struct pcm_params *pcm_params_get(unsigned int card, unsigned int device, unsigned int flags);
    void pcm_params_free(struct pcm_params *pcm_params);
    unsigned int pcm_params_get_min(struct pcm_params *pcm_params, enum pcm_param param);
    unsigned int pcm_params_get_max(struct pcm_params *pcm_params, enum pcm_param param);
     
    /* 配置pcm设备capture和playback的规格 */
    int pcm_get_config(struct pcm *pcm, struct pcm_config *config);
    int pcm_set_config(struct pcm *pcm, struct pcm_config *config);
     
    /* 返回调用tinyalsa最后的错误信息 */
    const char *pcm_get_error(struct pcm *pcm);
     
    /* 设置pcm设备采集和播放的位数,位数越高越接近真实声音 */
    unsigned int pcm_format_to_bits(enum pcm_format format);
     
    /* pcm设备的内置缓冲之间大小、帧数、时间的转换 */
    unsigned int pcm_get_buffer_size(struct pcm *pcm);
    unsigned int pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames);
    unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes);
    unsigned int pcm_get_latency(struct pcm *pcm); // in ms
     
    /* 返回下一帧的有效帧指针和该帧时间戳,时间戳有CLOCK_MONOTONIC和CLOCK_REALTIME可选,里面使用的是CLOCK_REALTIME */
    /* 我认为应该需要两个时间戳,一个用于播放的时间戳(CLOCK_MONOTONIC)不受系统时间的影响,一个用于记录当前音频采集的时间戳(CLOCK_REALTIME) */
    int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, struct timespec *tstamp);
     
    /* 通过FIFO把数据写入硬件用于playback或者从硬件中读取capture数据 */
    int pcm_write(struct pcm *pcm, const void *data, unsigned int count);
    int pcm_read(struct pcm *pcm, void *data, unsigned int count);
     
    /* 这是一个可选的和hardware通信的方式。 */
    int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count);
    int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count);
    int pcm_mmap_begin(struct pcm *pcm, void **areas, unsigned int *offset, unsigned int *frames);
    int pcm_mmap_commit(struct pcm *pcm, unsigned int offset, unsigned int frames);
    int pcm_start(struct pcm *pcm);
    int pcm_stop(struct pcm *pcm);
    int pcm_wait(struct pcm *pcm, int timeout);
    int pcm_set_avail_min(struct pcm *pcm, int avail_min);
    对于pcm设备的操作只需要注意所操作的设备是否存在,以及设备的能力问题不要设置设备所不能及的能力设备就可以正常工作了,其实就是需要注意channels、rate、format、period_size和period_count。

    MIXER API
    /* 对mixer设备的操作 */
    struct mixer *mixer_open(unsigned int card);
    void mixer_close(struct mixer *mixer);
     
    /* 获取mixer设备信息name */
    const char *mixer_get_name(struct mixer *mixer);
     
    /* 获取mixer设备的控制句柄 struct mixer_ctl */
    unsigned int mixer_get_num_ctls(struct mixer *mixer);
    struct mixer_ctl *mixer_get_ctl(struct mixer *mixer, unsigned int id);
    struct mixer_ctl *mixer_get_ctl_by_name(struct mixer *mixer, const char *name);
     
    /* 取mixer设备的控制信息 */
    const char *mixer_ctl_get_name(struct mixer_ctl *ctl);
    enum mixer_ctl_type mixer_ctl_get_type(struct mixer_ctl *ctl);
    const char *mixer_ctl_get_type_string(struct mixer_ctl *ctl);
    unsigned int mixer_ctl_get_num_values(struct mixer_ctl *ctl);
    unsigned int mixer_ctl_get_num_enums(struct mixer_ctl *ctl);
    const char *mixer_ctl_get_enum_string(struct mixer_ctl *ctl, unsigned int enum_id);
     
    /* Some sound cards update their controls due to external events,
    * such as HDMI EDID byte data changing when an HDMI cable is
    * connected. This API allows the count of elements to be updated.
    */
    void mixer_ctl_update(struct mixer_ctl *ctl);
     
    /* 设置和获取可控制的信息,方式有比例、数组、范围、固定值 */
    /* id通过mixer_get_num_ctls获得 */
    int mixer_ctl_get_percent(struct mixer_ctl *ctl, unsigned int id);
    int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent);
     
    int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id);
    int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count);
    int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value);
    int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count);
    int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string);
     
    int mixer_ctl_get_range_min(struct mixer_ctl *ctl);
    int mixer_ctl_get_range_max(struct mixer_ctl *ctl);
    MIXER使用,有哪些属性,干什么用的,看名字就已经很清楚了。
    // 原始状态
    root@pone:/data/local/tmp # tinymix -D 1
    Mixer name: 'mixer_name_xx'
    Number of controls: 2
    ctl type num name value
    0 BOOL 1 Mic Capture Switch Off
    1 INT 1 Mic Capture Volume 256
     
    // 详细信息
    root@pone:/data/local/tmp # tinymix -D 1 0
    Mic Capture Switch: Off
    root@pone:/data/local/tmp # tinymix -D 1 1
    Mic Capture Volume: 256 (range 0->256)
     
    // 设置
    root@pone:/data/local/tmp # tinymix -D 1 0 1
    root@pone:/data/local/tmp # tinymix -D 1 1 250
     
    // 修改后的状态
    root@pone:/data/local/tmp # tinymix -D 1
    Mixer name: 'mixer_name_xx'
    Number of controls: 2
    ctl type num name value
    0 BOOL 1 Mic Capture Switch On
    1 INT 1 Mic Capture Volume 250



    扩展:
    1. 什么是pcm
    2. 音频采样

    展开全文
  • tinyalsa下的mixer.c

    2020-11-06 18:27:28
    对应文章标题 : tinyalsa的代码中,加入android log使得能在logcat log中能打印出log
  • tinyalsa下的pcm.c

    2020-11-06 18:26:37
    对应文章标题 : tinyalsa的代码中,加入android log使得能在logcat log中能打印出log
  • include/tinyalsa/asoundlib.h

    2020-11-06 18:28:27
    对应文章标题 : tinyalsa的代码中,加入android log使得能在logcat log中能打印出log
  • tinyalsa-utils 静态链接

    2014-10-15 09:41:45
    tinyalsa-utils 包含了tinymix/tinyplay/tinycap/tinypcminfo使用方法是 tinyalsa + 工具名。比如要运行tinymix,那么就执行 tinyalsa mix或者tinyalsa tinymix。 更多信息见:...
  • Add recipe for tinyALSA

    2020-12-08 20:17:53
    <div><p>Specify library name and version: <strong>tinyALSA/1.1.1</strong></p> <ul><li>[x] I've read the ...
  • tinyalsa playback wav flow

    2019-10-26 21:24:49
    http://androidxref.com/9.0.0_r3/xref/external/tinyalsa/tinyplay.c#155 http://androidxref.com/9.0.0_r3/xref/external/tinyalsa/tinyplay.c#264
    展开全文
  • MT6737 Audio之TinyAlsa

    2019-06-18 14:24:53
    From TinyAlsa(精简版alsa)是 Android 默认...tinyalsa位于Android源码的external/tinyalsa位置。 关于tinyalsatinyalsa是Google在Android 4.0之后推的基于alsa内核的用户层音频接口。在Android 4.0之前还一直...
  • <div><p>There is something wrong with TINYALSA based program. We can not shut down TINYALSA on ours initiative in both case ,first ,stop the program using the task manager,second,exit ...
  • Android音频底层调试-基于tinyalsa

    万次阅读 多人点赞 2014-07-26 09:10:28
    由于Android中默认并没有使用标准alsa,而是使用的是tinyalsa,所以就算基于命令行的测试也要使用libtinyalsa。Android系统在上层Audio千变万化的时候,可以能这些个工具实时查看到,比如音频通道的切换等等.   1....
  • tinyalsa 与 audioroute

    2019-07-19 02:28:35
    Android 音频系统基于 Linux 的 ALSA 驱动, tinyalsa 在 alsa 的驱动基础上封装音频接口,提供给 audio HAL, audio HAL 提供接口给 Android audioflinger 等 framework。 HAL 需要实现 audio 硬件的打开与关闭...
  • Android 音频tinyalsa开发

    千次阅读 2019-06-12 14:45:16
    Platform: AIO-3399J OS: Android 7.1 Kernel: v4.4.83 在开发完音频驱动后,通过tinyplay、tinycap测试音频驱动的播放和录音功能正常,但使用Android自带的APP...开发音频的硬件抽象层的tinyalsa_hal的动态库au...
  • tinyalsa使用 ---Good

    千次阅读 2019-03-02 11:11:30
    come from :... tinyalsa使用 tinymix tinyplay tinycap tinymeminfo ...tinyalsa使用 ... tinyalsa源码位于android源码目录下external/tinyalsa,包含了四个命令,分别...
  • tinyalsa上抓取音频

    2021-01-14 08:18:21
    我们经常会遇到这样的问题,应用读取到的音频有问题,需要在tinyalsa里面读取音频来确认是底层音频有问题,还是应用处理之后存在的问题。所以,这个patch就出现了代码的逻辑很简单,主要...
  • 基于Android7.1 音频tinyalsa硬件抽象层动态库开发,具体参考https://blog.csdn.net/u010872301/article/details/89186283
  • Alsa或TinyAlsa添加控制接口: https://notes.z-dd.net/2020/03/19/Alsa%E6%88%96TinyAlsa%E6%B7%BB%E5%8A%A0%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3/
  • <div><p>Hi, <p>I'...<p>The first value is an enable/disable flag (0/1), and the second value corresponds to the audio endpoint as defined in the kernel driver....tinyalsa/tinyalsa</p></div>
  • <div><p>I want capture playback sound on ubuntu and android. I call pcm_open() and pcm_readi() and I try: mixer_get_ctl_by_name(mixer, "Loopback Mixing"...tinyalsa/tinyalsa</p></div>
  • 已做过一些 alsa的工作,但tinyalsa不一样,所以需要再做一些简单的工作。 1,调试工作,在MTK的源码包中/external/tinyalsa目录下有三个工具,mmm编译一下,push到手机中。 2,MTK的手机,/dev/snd下有需要PCM...
  • tinyalsa音频子系统之一 linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一原创 2017年03月20日 14:51:21 3541目前linux中主流的音频体系结构是ALSA(Advanced Linux Sound ...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 336
精华内容 134
关键字:

tinyalsa