`
duyouhua1214
  • 浏览: 236162 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dsp编程

 
阅读更多

1、DSP编程
对OSS驱动声卡的编程使用Linux文件接口函数,如图17.5,DSP接口的操作一般包括如下几个步骤:
① 打开设备文件/dev/dsp。
采用何种模式对声卡进行操作也必须在打开设备时指定,对于不支持全双工的声卡来说,应该使用只读或者只写的方式打开,只有那些支持全双工的声卡,才能以读写的方式打开,这还依赖于驱动程序的具体实现。Linux允许应用程序多次打开或者关闭与声卡对应的设备文件,从而能够很方便地在放音状态和录音状态之间进行切换。
② 如果有需要,设置缓冲区大小。
运行在Linux内核中的声卡驱动程序专门维护了一个缓冲区,其大小会影响到放音和录音时的效果,使用ioctl()系统调用可以对它的尺寸进行恰当的设置。调节驱动程序中缓冲区大小的操作不是必须的,如果没有特殊的要求,一般采用默认的缓冲区大小也就可以了。如果想设置缓冲区的大小,则通常应紧跟在设备文件打开之后,这是因为对声卡的其它操作有可能会导致驱动程序无法再修改其缓冲区的大小。
③ 设置声道(channel)数量。
根据硬件设备和驱动程序的具体情况,可以设置为单声道或者立体声。
④ 设置采样格式和采样频率
采样格式包括AFMT_U8(无符号8位)、AFMT_S8(有符号8位)、AFMT_U16_LE(小端模式,无符号16位)、 AFMT_U16_BE(大端模式,无符号16位)、AFMT_MPEG、AFMT_AC3等。使用SNDCTL_DSP_SETFMT IO控制命令可以设置采样格式。
对于大多数声卡来说,其支持的采样频率范围一般为5kHz到44.1kHz或者48kHz,但并不意味着该范围内的所有连续频率都会被硬件支持,在 Linux下进行音频编程时最常用到的几种采样频率是11025Hz、16000Hz、22050Hz、32000Hz 和44100Hz。使用SNDCTL_DSP_SPEED IO控制命令可以设置采样频率。
⑤ 读写/dev/dsp实现播放或录音。

图17.5 OSS dsp接口用户空间操作流程
代码清单17.3的程序实现了利用/dev/dsp接口进行声音录制和播放的过程,它的功能是先录制几秒钟音频数据,将其存放在内存缓冲区中,然后再进行放音。
代码清单17.3 OSS DSP接口应用编程范例
1 #include <unistd.h>
2 #include <fcntl.h>
3 #include <sys/types.h>
4 #include <sys/ioctl.h>
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <linux/soundcard.h>
8 #define LENGTH 3    /* 存储秒数 */
9 #define RATE 8000   /* 采样频率 */
10 #define SIZE 8      /* 量化位数 */
11 #define CHANNELS 1 /* 声道数目 */
12 /* 用于保存数字音频数据的内存缓冲区 */
13 unsigned char buf[LENGTH *RATE * SIZE * CHANNELS / 8];
14 int main()
15 {
16   int fd; /* 声音设备的文件描述符 */
17   int arg; /* 用于ioctl调用的参数 */
18   int status; /* 系统调用的返回值 */
19   /* 打开声音设备 */
20   fd = open("/dev/dsp", O_RDWR);
21   if (fd < 0)
22   {
23     perror("open of /dev/dsp failed");
24     exit(1);
25   }
26   /* 设置采样时的量化位数 */
27   arg = SIZE;
28   status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
29   if (status == - 1)
30     perror("SOUND_PCM_WRITE_BITS ioctl failed");
31   if (arg != SIZE)
32     perror("unable to set sample size");
33   /* 设置采样时的通道数目 */
34   arg = CHANNELS;
35   status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
36   if (status == - 1)
37     perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");
38   if (arg != CHANNELS)
39     perror("unable to set number of channels");
40   /* 设置采样率 */
41   arg = RATE;
42   status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
43   if (status == - 1)
44     perror("SOUND_PCM_WRITE_WRITE ioctl failed");
45   /* 循环,直到按下Control-C */
46   while (1)
47   {
48     printf("Say something:\n");
49     status = read(fd, buf, sizeof(buf)); /* 录音 */
50     if (status != sizeof(buf))
51       perror("read wrong number of bytes");
52     printf("You said:\n");
53     status = write(fd, buf, sizeof(buf)); /* 放音 */
54     if (status != sizeof(buf))
55       perror("wrote wrong number of bytes");
56     /* 在继续录音前等待放音结束 */
57     status = ioctl(fd, SOUND_PCM_SYNC, 0);
58     if (status == - 1)
59       perror("SOUND_PCM_SYNC ioctl failed");
60   }
61 }

 

来源:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74026

分享到:
评论

相关推荐

    TMS320C6000系列DSP编程工具与指南_中文版

    《TMS320C6000系列DSP编程工具与指南_中文版》一书是由美国德州仪器公司(Texas Instruments, 简称TI)出版的,提供了关于TMS320C6000系列数字信号处理器(DSP)的编程工具和编程指南。这本书是基于TI公司提供的三篇英文...

    TMS320C6000系列DSP编程工具与指南.pdf

    ### TMS320C6000系列DSP编程工具与指南 #### 一、TMS320C6000系列DSP简介 TMS320C6000系列是德州仪器(Texas Instruments, TI)推出的一款高性能数字信号处理器(Digital Signal Processor, DSP)系列。该系列DSP...

    DSP编程技巧之---详解浮点运算的定点编程

    DSP编程技巧之详解浮点运算的定点编程 DSP 编程技巧之详解浮点运算的定点编程是指在不支持硬件浮点运算的处理器上,对浮点数的处理需要通过编译器来完成。在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的...

    使用CCS进行DSP编程(一)——CCS编程入门.pdf

    使用 CCS 进行 DSP 编程(一)—— CCS 编程入门 本资源是关于使用 Code Composer Studio(CCS)进行 DSP 编程的入门指导。用户可以通过学习 CCS 的使用,来更好地编程 C6000 处理器。 知识点一:CCS 的安装和设置...

    DSP编程手册.pdf

    **DSP编程手册** 该《DSP编程手册》是一本详尽阐述数字信号处理(DSP)编程技术的专业参考资料。针对想要深入理解和应用数字信号处理技术的工程师和学者,这本书提供了丰富的实践指导和理论知识。数字信号处理是...

    DSP编程素材,内含源文件,库文件,以及头文件

    本压缩包包含了用于DSP编程的重要素材,旨在帮助开发者更高效地进行DSP程序设计。 1. **源文件**: 源文件通常是扩展名为`.c`或`.cpp`的文本文件,它们包含了用C或C++语言编写的源代码。这些源代码是程序员用人类可...

    dsp编程全书共15部分

    本压缩包包含了一套完整的DSP编程全书,由15个部分组成,涵盖了广泛的DSP编程知识。 一、基础理论篇 这部分主要介绍数字信号处理的基本概念,包括离散时间信号与系统、数字滤波器理论、傅里叶变换在数字信号处理中...

    如何开始DSP编程.pdf

    ### 如何开始DSP编程 #### DSP编程概述 数字信号处理器(Digital Signal Processor,简称DSP)是一种专门用于快速处理数字信号的微处理器。由于其强大的计算能力和优化的指令集设计,DSP广泛应用于通信、音频处理...

    DSP编程的几个关键问题.pdf

    ### DSP编程的关键问题详解 #### DSP编程概览 在深入探讨DSP编程的几个关键问题之前,我们首先要了解DSP(Digital Signal Processor)的本质及其在信号处理领域的广泛应用。DSP是一种专门设计用于快速执行数字信号...

    DSP编程技巧(很有用)

    DSP编程技巧涵盖了许多方面,尤其是对于初学者而言,掌握这些技巧能有效提升开发效率和代码质量。本文将重点讨论编译流程的相关知识点,这在DSP开发中至关重要。 首先,了解编译器的角色至关重要。在DSP编程中,...

    DSP编程一周通

    DSP编程一周通,对初学学习DSP的人应该有帮助

    DSP编程一周通从简单例子学习DSP

    从最简单例子学习DSP,从最简单例子学习DSP,从最简单例子学习DSP

    DSP编程指南 高手进阶

    《DSP编程指南 高手进阶》是一本专为C2000 DSP程序员设计的高级教程,旨在帮助读者深入理解和提升在C2000 DSP上的编程技能。C2000系列是德州仪器(TI)推出的一种高性能数字信号处理器,广泛应用于实时控制、电力...

    DSP编程指令集.rar_DSP编程_dsp_dsp 指令_dsp 指令集_dsp 资料

    《DSP编程指令集详解》 数字信号处理器(Digital Signal Processor,简称DSP)是专门用于处理数字信号的微处理器,其核心在于高效的运算能力和实时性。在众多的DSP型号中,TI(Texas Instruments)的C54系列是一款...

    DSP.rar_CCS_CCS软件_DSP CCS_dsp编程软件_dsp软件编程

    《CCS:强大的DSP编程工具》 在数字信号处理(DSP)领域,高效的软件工具是不可或缺的。"DSP.rar_CCS_CCS软件_DSP CCS_dsp编程软件_dsp软件编程"这个压缩包文件,核心内容围绕着Texas Instruments(TI)的Code ...

    DSP系统设计和BIOS编程及应用实例:DSP编程及实例

    DSP编程主要涉及到C语言和汇编语言,有时也会使用高级语言如MATLAB或Simulink进行算法开发,然后转换成可执行代码。编程时,需要熟悉DSP指令集,理解如何优化算法以充分利用DSP的并行处理能力。例如,循环展开、数据...

    DSP编程技巧

    关于TIDSP的一些编程技巧,包括编译器的选项、代码的优化、库文件的使用、代码实现标准、实时运行环境等等

    TMS320F2812 DSP编程

    TMS320F2812 DSP编程之一,TMS320F2812处理器是TI 公司C2000系列处理器中的一款,主频可以达到150Mhz,我目前在项目中就是使用这款处理器。该处理器在电机控制等工业控制领域,有着大量的应用。TMS320C28x™ 控制器...

Global site tag (gtag.js) - Google Analytics