PCM DUMP

本文详细介绍了如何在Linux内核中实现PCM DUMP,利用ALSA Capture接口和USBAudio设备创建音频循环。通过在sound/usb/pcm.c文件中添加和替换操作集,实现AudioCapture节点,并最终添加新的AudioCapture节点以完成Kernel级别的音频处理。
摘要由CSDN通过智能技术生成

【ALSA】【USBAudio】【PCMDUMP】

基本原理

通过ALSA Capture 提供的接口,在kernel实现Audioloop.

Kernel实现

1. 实现AudioCapture节点操作集

在sound/usb/pcm.c加入如下代码:

struct usb_dummy_capture{
        struct snd_pcm_substream *pcm_substream;
        snd_pcm_format_t pcm_format;    /* current audio format (for hw_params callback) */
        unsigned int channels;          /* current number of channels (for hw_params callback) */
        unsigned int cur_rate;          /* current rate (for hw_params callback) */
        unsigned int period_bytes;      /* current period bytes (for hw_params callback) */
        unsigned int running: 1;        /* running status */
        unsigned int hwptr_done;        /* processed byte position in the buffer */
        unsigned int transfer_done;             /* processed frames since last period update */

};

static struct usb_dummy_capture g_dummy_capture;

static struct snd_pcm_hardware snd_usb_dummy_hardware =
{
        .info =                 SNDRV_PCM_INFO_MMAP |
                                SNDRV_PCM_INFO_MMAP_VALID |
                                SNDRV_PCM_INFO_BATCH |
                                SNDRV_PCM_INFO_INTERLEAVED |
                                SNDRV_PCM_INFO_BLOCK_TRANSFER |
                                SNDRV_PCM_INFO_PAUSE,
        .formats = SNDRV_PCM_FMTBIT_S16_LE,
        .rates    = SNDRV_PCM_RATE_48000,
        .rate_min = 48000,
        .rate_max = 48000,
        .channels_min = 2,
        .channels_max = 2,
        .buffer_bytes_max =     1024 * 1024,
        .period_bytes_min =     64,
        .period_bytes_max =     512 * 1024,
        .periods_min =          2,
        .periods_max =          1024,
};


static int snd_usb_dummy_open(struct snd_pcm_substream *substream)
{
    g_dummy_capture.pcm_substream = substream;
        struct snd_pcm_runtime *runtime = substream->runtime;

        runtime->hw = snd_usb_dummy_hardware;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值