当前位置:首页 » 编程语言 » c语言录音笔

c语言录音笔

发布时间: 2022-05-05 11:31:20

c语言是用来编写程序的

C语言是用来编写程序的没错,像我们平时写的什么搜索排序之类的都属于程序,而酷狗,YY属于软件,软件和程序不同但又向关联,软件是包含程序的有机集合体,程序是软件的必要元素。任何软件都有可运行的程序,至少一个。比如:操作系统给的工具软件,很多都只有一个可运行程序。而Office是一个办公软件包,却包含了很多可运行程序,软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。也就是说,学习程序语言是做软件的第一步,真正的软件往往需要一个团队的共同努力,将模块式的程序拼接。
当然,做软件并不一定要精通C语言,我的专业是要学程序设计的,我上学期通过APPINVENTOR独立做了一款自己的手机APP,不算太难,你也可以尝试一下。
希望我的回答能帮到你

❷ 谁帮我把语音编解码引擎解释一下

目前市场上有很多语音录放系统,如录放音玩具、录音笔等,大多采用了单片机控制一个语音芯片,再接一个FLASH存储器的结构。由于语音芯片都是固定的编码算法,使得系统用途单一,不利于进一步改进,缺乏灵活性,如日本OKI公司的MSM6588只能完成ADPCM编码。

用SDA80D51芯片实现的语音录放音系统,系统硬件简单、工作可靠。所有的编解码算法都由软件来完成,设计者可以编制自己的软件,完成不同的功能。它既可以作为简单的数字录放音系统,也可以通过改变程序做语音识别、语音合成等多种系统。用途灵活、功能强大。该系统选用G.723.1语音编解码算法来完成语音的录放。

1 SDA80D51芯片介绍

SDA80D51芯片是德国Infineon公司生产的适合语音处理的芯片,它采用0.18μm工艺,核的工作电压为1.8V,I/O电压为3.3V,模拟Codec部分电压2.5V,功耗是150mW。该芯片相当于一个片上系统(SOC),内部集成了许多功能模块,如图1所示。由于它集成了许多功能模块,如图1所示。由于它集成了许多功能块,几乎只需要一片芯片就能完成语音处理和系统控制。

该芯片含有两个处理器,分别是16位DSP(OAK)和8位MCU(M8051 E-Warp)。M8051 E-Warp核由美国Mentor Graphics公司设计,它是与一般8051兼容的MCU,具有很多的增强功能,最高工作速度可达50MIPS(Million Instruction per Second),是目前为止最快的增强8051。传统8051的一个机器周期是12个时钟周期,而这个核心只需2个时钟周期,速度传统8051的6倍。许多指令都能在一个机器周期内完成。由于指令与8051兼容,使得程序员不用花许多时间学习新指令,而直接采用传统的8051编程方式就行。芯片集成有JTAG口,用Mentor Graphics公司的FS2(First Silicon Solutions)仿真器就可以实现在线仿真。

OAK核是美国DSP Group公司设计的16位低功耗、低电压和高速定点DSP。采用双金属CMOS,在0.6μm或0.5μm以下工艺生产。工作电压范围在2.7V~5.5V。在5V 80MHz工作条件下,消耗电流38mA;在3.3V 80MHz条件下,消耗电流25mA。该核采用Harvard总线结构,工作速度可达100MIPS。

Codec部分由I2S、ADC和DAC组成。I2S口可用来外接一些通用的模/数芯片。两路的12位8kHz采样率的ADC,可接峰峰值为1.03V的差分电压。片内有数字AGC,可放大0到42dB(8档,6dB步长);模/数转换采用Sigma-Delta调制技术并经过一度的换算,得到16bit的PCM码流,送往处理器。两路11位8kHz采样率的DAC可软件调节增益,可放大0到-18dB(-6dB步长)。所有Codec部分可通过ASI接口连到OAK或M8051上。

SDA80D51芯片还有I2C、SPI和PWM接口模块,可以通过M8051来控制。另外在不同版本的芯片上还有多达50到250之间的GPIO(通用的输入输出口),这可以保证系统控制的灵活性。

该芯片最有特点的功能模块是存储器管理单元MMU(Memory Manage Unit),它可以管理两个核的存储区映射。物理存储器(RAM或ROM)被看成由多个块组成,每个块的大小在不同版本的芯片上定义是不同的,本系统中,块的大小是16K字节(或8K节)。MMU既可以把块(8K字)映射给OAK的程序区或数据区,也可以把块(16K字节)映射给M8051的程序区或数据区。这些完全由写M8051的特殊功能寄存器来完成。存储空间的自由挂接使得完成两个核之间的数据转换变得非常容易。此外,程序装载和启动也需要MMU的控制。

整个芯片的工作方式是M8051作为主控制芯片,完成对各种接口的控制和系统的配置。OAK作为协处理器,完成语音编解码算法等计算。两个核之间还有两个64字深的FIFO。它们用于双核通信。

2 G.723.1语音编解码

语音编解码算法一般分为三类:波形编码、参数编码(声码器)和混合编码。波形编码技术是在不建立语音模型的情况下,直接对语音波形用编码方式逼近,可有时域的脉冲编码调制和变换域编码;参数编码是在一定的语音模型基础上,在编码端分析出该模型参数,并选择适当的方式对其进行高效率的编码,而在解码端利用这些参数和语音模型,用合适的激励源(excitation)重新合成语音;混合编码则保留了参数编码的语音模型的假定,又利用了波形编码的准则优化激励信号。

G.723.1算法属于混合编码。语音模型是基于线性预测理论的全极点模型。输入是16bit的PCM码流,然后采用合成分析、矢量量化等方法,以感觉加权后的语音基音残差信号能量最小为准则进行编码。有两种类型编码方式,一种是6.3kb/s多脉冲最大似然量化方法(压缩率20:1),另一种是5.3kb/s代数码本激励线性预测ACELP(压缩率24:1)。后者的压缩率高,编码速率低,这可以降低系统存储语音时所需存储器的容量。而且解码算法简单,回放语音时不会有延迟感,语音清晰。

3 语音录放音系统硬件设计

语音录放音系统硬件电路的系统框图如图2所示。由于芯片内(虚线内)集成了许多功能模块,使得电路的结构变得非常简单。

SDA80D51的RS232串行口通过MAX3222匹配电压后,连接到计算机。

芯片的启动支持SPI、I2C和RS232串口三种方式。本系统采用I2C启动方式,选用ATMEL公司的24C64。上电后,片内固化在ROM上的程序会从选定的I2C芯片拷贝256字节客户启动程序到片内程序区ff00h~ffffh处,最后把程序指针指向ff00h,开始执行。

系统程序存在SST28LF040中,由启动芯片中的用户启动程序把系统程序装载到芯片内部的RAM里,然后处理器会执行RAM中的程序指令。

语音经过编码压缩后存储在三星公司的KM29U128T(16M×8bit)内。它的寻址采用串行方式,即8根数据线既作地址线也作数据线,先输入地址,再传送数据。这样,用很少的SDA80D51地址线就可寻址很大的空间,记录大量的语音数据很方便。

用8根GPIO线实现一个4×4的小键盘,可用来作为控制接口。在录放音时,可以通过对键盘的扫描来决定下一步骤。

4 软件设计

由于要对芯片内的功能模块、系统控制和编解码算法进行编程,这使得软件设计量比较大。考虑到本文的篇幅,这里只介绍总程序结构和录放音的控制部分。

总程序框架采用前后台的工作方式。前台轮寻各个任务引擎,判断是否有任务需要处理。若有,切换状态并执行该任务;若没有,就继续查询。后台主要完成对硬件的接口、中断处理程序以及缓冲硬件数据。前台和后台的通讯是靠共享缓冲区来完成的。这种前后台的工作方式可处理多任务,每个任务只占用一个时间片。

数字录放音程序在整个软件设计中只有一个任务,它提供一个任务引警程序,由前台来调用。具体工作过程是OAK接CODEC模块,负责采集数据、编码和解码算法以及语音的回放;M8051负责配置系统工作寄存器和对FLASH的读写。两个核之间通过FIFO发消息,消息的定义格式(C语言)如下:

typedef union tag_FIFO_MESSAGE

{

struct

{

struct

{

BYTE bIdSource://发送方ID

BYTE bIdDest: //接收方ID

WORD wMsgType; //发送消息类型

WORD wDataLen; //数据长度

WORD wSeq; //消息序号

}uHead;//消息头

WORD wData[27]; //消息数据内容

WORD wCRC; //校验

}uForm;

WORD wBuf[32];

}FIFO_MESSAGE;

两个核的任务引擎程序分别用C语言编写,程序结构基本相同,都采用状态跳转的方式,即每个子程序模块都是一个状态,满足一定条件就跳到下一状态;若都不满足,就退回到前台轮寻程序。由前台程序在下一时间片继续调用停留在当前状态的程序。

如图3所示,每个圆圈都是一个状态,两个核之间的横向的箭头表示消息,向下的箭头表示状态的跳转。

在录音时,M8051的“录音初始化状态”先做初始化并发送START消息,表明录音开始,然后跳到“存语音数据状态”,等待OAK的消息。OAK的“录音初始化状态”接收到START消息后,先做初始化,然后跳到“语音采集编码状态”,在这里会不停地采集语音并用G.723.1编码,采满8K字后,向M8051发送STORE消息。M8051收到消息后,用存储器切换程序,拷贝数据到M8051的RAM区,并存到FLASH里,这由“存语音数据状态”来完成。若FLASH存满,M8051会发送STOP消息,然后OAK和M8051都进入“录音结束状态”。OAK结束后还会给M8051发送DONE消息,表明录音结束。

在放音时,M8051的“放音初始化状态”打开FLASH的文件系统并发送START消息。OAK收到后,发送INIT消息,请求M8051传送第一个数据包。M8051的“初始化确认状态”收到INIT消息后,从FLASH读取一个数据包,传送给OAK,若正确就发送ACK消息并跳转到“读语音数据状态”。要是失败的话,就发送STOP消息,这样OAK和M8051都会结束语音。当OAK收到ACK消息和一个语音数据包时,会跳到“解码放音状态”,在这里不停的把数据解码并发送给DAC。若放完这个语音数据包,就发LOAO消息,申请下一个,不停循环。同时M8051会准备语音数据包,并传送给OAK,若没有数据或按停止键,M8051会发STOP消息,结束发音。然后OAK会发FINISH消息,表明所有录音结束。接着M8051的“放音结束状态”会关闭文件系统,清空缓冲区。

由上面的描述可看出,整个数字录放音的工作流程是M8051作主控制器,OAK作从控制器。M8051发起开始信号,收尾数字录放音,而OAK主要负责编解码。这种工作方式灵活可靠,程序很容易扩展,例如状态数的增加和消息类型的扩展都很容易。

该系统的主要特点是充分利用SDA80D51的强大的功能集成,完成语音处理系统。完成一个大系统,几乎只需要一个芯片。相信该芯片在语音及相关领域一定会有很好的应用前景

❸ c 语言的 API 是什么

API是操作系统为我们准备的函数,你可以加入头文件,然后调用它们,至于编程实例你可以到:
http://tieba..com/f?kw=erbi_lucifer&fr=itb_favo&fp=favo#
这里是我的一些编程的实例,都有重点讲解和程序源代码……希望你喜欢。O(∩_∩)O哈哈~

各类编程实例……

C语言windows编程基础之sdk窗体编写模板
C语言windows编程基础之创建项目(vs2010)
【C语言】【windows】--获取文件属性的信息
【C语言】【windows】--注册表--开机启动程序
【C语言】【windows】--圣诞礼物--舞动窗体
【C语言】【windows】--电子时钟编写
【C语言】【windows】--记事框编写
【C语言】【windows】--录音器编写
【C语言】【windows】--获取主机名和IP地址
【C语言】【windows】--进制转换器

❹ 哪位c语言程序设计大侠帮我看看这个ISD1420语音芯片的c程序设计怎么写

这个应该在“单片机”方面问,

❺ C语言调用麦克风

打开运行————cmd,输入sndrec32-------录音机 ,记得采纳,朋友

❻ 麦克风被其他应用占用熊熊C语言怎么输入怎么改回来

1、按照系统提示重启手机,2、在权限管理列表中打开录音选项的权限开关即可,3、后台某个应用正在占用麦克风权限,将其它后台应用关闭掉即可。
话筒又称麦克风,一种电声器材,属传声器,是声电转换的换能器,通过声波作用到电声元件上产生电压,再转为电能,用于各种扩音设备中,话筒种类繁多,电路简单,分析话筒电路主要掌握两点:1、信号传输回路分析,比较简单,分析各种话筒输入插口电路,2、话筒信号放大器分析,话筒放大器是一种小信号低噪声音频放大器,分析话筒电平控制电路并不困难。

❼ 用C语言编写一个录音与回放的程序,能帮帮我么

#include <conio.h>
#include <math.h>
#include <process.h>
#define N 5//N个点
#define T 3 //T次拟合
#define W 1//权函数
#define PRECISION 0.00001
float pow_n(float a,int n)
{
int i;
if(n==0)
return(1);
float res=a;
for(i=1;i<n;i++)
{
res*=a;
}
return(res);
}
void mutiple(float a[][N],float b[][T+1],float c[][T+1])
{
float res=0;
int i,j,k;
for(i=0;i<T+1;i++)
for(j=0;j<T+1;j++)
{
res=0;
for(k=0;k<N;k++)
{
res+=a[i][k]*b[k][j];
c[i][j]=res;
}
}
}
void matrix_trans(float a[][T+1],float b[][N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<T+1;j++)
{
b[j][i]=a[i][j];
}
}
}
void init(float x_y[][2],int n)
{
int i;
printf("请输入%d个已知点:\n",N);
for(i=0;i<n;i++)
{
printf("(x%d y%d):",i,i);
scanf("%f %f",&x_y[i][0],&x_y[i][1]);
}
}
void get_A(float matrix_A[][T+1],float x_y[][2],int n)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<T+1;j++)
{
matrix_A[i][j]=W*pow_n(x_y[i][0],j);
}
}
}
void print_array(float array[][T+1],int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<T+1;j++)
{
printf("%-g",array[i][j]);
}
printf("\n");
}
}
void convert(float argu[][T+2],int n)
{
int i,j,k,p,t;
float rate,temp;
for(i=1;i<n;i++)
{
for(j=i;j<n;j++)
{
if(argu[i-1][i-1]==0)
{
for(p=i;p<n;p++)
{
if(argu[p][i-1]!=0)
break;
}
if(p==n)
{
printf("方程组无解!\n");
exit(0);
}
for(t=0;t<n+1;t++)
{
temp=argu[i-1][t];
argu[i-1][t]=argu[p][t];
argu[p][t]=temp;
}
}
rate=argu[j][i-1]/argu[i-1][i-1];
for(k=i-1;k<n+1;k++)
{
argu[j][k]-=argu[i-1][k]*rate;
if(fabs(argu[j][k])<=PRECISION)
argu[j][k]=0;
}
}
}
}
void compute(float argu[][T+2],int n,float root[])
{
int i,j;
float temp;
for(i=n-1;i>=0;i--)
{
temp=argu[i][n];
for(j=n-1;j>i;j--)
{
temp-=argu[i][j]*root[j];
}
root[i]=temp/argu[i][i];
}
}
void get_y(float trans_A[][N],float x_y[][2],float y[],int n)
{
int i,j;
float temp;
for(i=0;i<n;i++)
{
temp=0;
for(j=0;j<N;j++)
{
temp+=trans_A[i][j]*x_y[j][1];
}
y[i]=temp;
}
}
void cons_formula(float coef_A[][T+1],float y[],float coef_form[][T+2])
{
int i,j;
for(i=0;i<T+1;i++)
{
for(j=0;j<T+2;j++)
{
if(j==T+1)
coef_form[i][j]=y[i];
else
coef_form[i][j]=coef_A[i][j];
}
}
}
void print_root(float a[],int n)
{
int i,j;
printf("%d个点的%d次拟合的多项式系数为:\n",N,T);
for(i=0;i<n;i++)
{
printf("a[%d]=%g,",i+1,a[i]);
}
printf("\n");
printf("拟合曲线方程为:\ny(x)=%g",a[0]);
for(i=1;i<n;i++)
{
printf(" + %g",a[i]);
for(j=0;j<i;j++)
{
printf("*X");
}
}
printf("\n");
}
void process()
{
float x_y[N][2],matrix_A[N][T+1],trans_A[T+1][N],coef_A[T+1][T+1],coef_formu[T+1][T+2],y[T+1],a[T+1];
init(x_y,N);
get_A(matrix_A,x_y,N);
printf("矩阵A为:\n");
print_array(matrix_A,N);
matrix_trans(matrix_A,trans_A);
mutiple(trans_A,matrix_A,coef_A);
printf("法矩阵为:\n");
print_array(coef_A,T+1);
get_y(trans_A,x_y,y,T+1);
cons_formula(coef_A,y,coef_formu);
convert(coef_formu,T+1);
compute(coef_formu,T+1,a);
print_root(a,T+1);
}
void main()
{
process();
}
]]>
</Content>
<PostDateTime>2007-4-19 19:23:57</PostDateTime>
</Reply>
<Reply>
<PostUserNickName></PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>40389872</ReplyID>
<TopicID>5478010</TopicID>
<PostUserId>1526752</PostUserId>
<PostUserName>jiangxc2004</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
你可以改一下
不从终端输入,直接在程序中给出参数
请输入5个已知点:
(x0 y0):-2 -0.1
(x1 y1):-1 0.1
(x2 y2):0 0.4
(x3 y3):1 0.9
(x4 y4):2 1.6
矩阵A为:
1 -2 4 -8
1 -1 1 -1
1 0 0 0
1 1 1 1
1 2 4 8
法矩阵为:
5 0 10 0
0 10 0 34
10 0 34 0
0 34 0 130
5个点的3次拟合的多项式系数为:
a[1]=0.408571, a[2]=0.391667, a[3]=0.0857143, a[4]=0.00833333,
拟合曲线方程为:
y(x)=0.408571 + 0.391667*X + 0.0857143*X*X + 0.00833333*X*X*X
]]>
</Content>
<PostDateTime>2007-4-19 19:26:11</PostDateTime>
</Reply>
<Reply>
<PostUserNickName></PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>40390406</ReplyID>
<TopicID>5478010</TopicID>
<PostUserId>1526752</PostUserId>
<PostUserName>jiangxc2004</PostUserName>
<Point>0</Point>
<Content>
<![CDATA[
这样就可以直接调用process()函数了!
二次拟合的话就把宏 T 成2;
拟合点的数目 N 也可以修改!
也可以去到注释的部分进行返回值的调用!
另外,团IDC网上有许多产品团购,便宜有口碑

❽ 在C语言程序里,alTime <<= 3;这个符号是干什么的啊

开始→运行→命令 大全

winver---------检查Windows版本

wmimgmt.msc----打开windows管理体系结构(WMI)

wupdmgr--------windows更新程序

wscript--------windows脚本宿主设置

write----------写字板

winmsd---------系统信息

wiaacmgr-------扫描仪和照相机向导

winchat--------XP自带局域网聊天

mem.exe--------显示内存使用情况

Msconfig.exe---系统配置实用程序

mplayer2-------简易widnows media player

mspaint--------画图板

mstsc----------远程桌面连接

mplayer2-------媒体播放机

magnify--------放大镜实用程序

mmc------------打开控制台

mobsync--------同步命令

dxdiag---------检查DirectX信息

drwtsn32------ 系统医生

devmgmt.msc--- 设备管理器

dfrg.msc-------磁盘碎片整理程序

diskmgmt.msc---磁盘管理实用程序

dcomcnfg-------打开系统组件服务

ddeshare-------打开DDE共享设置

dvdplay--------DVD播放器

net stop messenger-----停止信使服务

net start messenger----开始信使服务

notepad--------打开记事本

nslookup-------网络管理的工具向导

ntbackup-------系统备份和还原

narrator-------屏幕“讲述人”

ntmsmgr.msc----移动存储管理器

ntmsoprq.msc---移动存储管理员操作请求

netstat -an----(TC)命令检查接口

syncapp--------创建一个公文包

sysedit--------系统配置编辑器

sigverif-------文件签名验证程序

sndrec32-------录音机

shrpubw--------创建共享文件夹

secpol.msc-----本地安全策略

syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码

services.msc---本地服务设置

Sndvol32-------音量控制程序

sfc.exe--------系统文件检查器

sfc /scannow---windows文件保护

tsshutdn-------60秒倒计时关机命令

tourstart------xp简介(安装完成后出现的漫游xp程序)

taskmgr--------任务管理器

eventvwr-------事件查看器

eudcedit-------造字程序

explorer-------打开资源管理器

packager-------对象包装程序

perfmon.msc----计算机性能监测程序

progman--------程序管理器

regedit.exe----注册表

rsop.msc-------组策略结果集

regedt32-------注册表编辑器

rononce -p ----15秒关机

regsvr32 /u *.dll----停止dll文件运行

regsvr32 /u zipfldr.dll------取消ZIP支持

cmd.exe--------CMD命令提示符

chkdsk.exe-----Chkdsk磁盘检查

certmgr.msc----证书管理实用程序

calc-----------启动计算器

charmap--------启动字符映射表

cliconfg-------SQL SERVER 客户端网络实用程序

Clipbrd--------剪贴板查看器

conf-----------启动netmeeting

compmgmt.msc---计算机管理

cleanmgr-------垃圾整理

ciadv.msc------索引服务程序

osk------------打开屏幕键盘

odbcad32-------ODBC数据源管理器

oobe/msoobe /a----检查XP是否激活

lusrmgr.msc----本机用户和组

logoff---------注销命令

iexpress-------木马捆绑工具,系统自带

Nslookup-------IP地址侦测器

fsmgmt.msc-----共享文件夹管理器

utilman--------辅助工具管理器

gpedit.msc-----组策略

❾ 怎么学C语言.

C语言非常简单好学,首先推荐一本书
谭浩强 C程序设计
这是我见过的最好的C初学者的书籍(没有之一),认真学习里面的没一章的内容,开始学的时候不用问太多为什么,对于第4章的例题建议多抄,手动抄到电脑上进行运行然后再自己不看书再写几遍,课后的习题一定要自己完成,C并不难,关键在于一定要多写,学起来才很顺畅

热点内容
安卓如何下载lv手游 发布:2025-05-14 10:35:45 浏览:383
pythondict添加key 发布:2025-05-14 10:33:59 浏览:381
柱子箍筋加密区长度 发布:2025-05-14 10:18:29 浏览:352
云服务器和内网穿透哪个好 发布:2025-05-14 10:16:41 浏览:627
安徽新能源网络配置是什么 发布:2025-05-14 10:06:24 浏览:631
pinode搭建服务器 发布:2025-05-14 10:04:23 浏览:4
电脑服务器ip名称 发布:2025-05-14 10:01:09 浏览:749
connectorpython 发布:2025-05-14 09:48:50 浏览:763
配置不好怎么办 发布:2025-05-14 09:46:40 浏览:623
数据流程图中的数据存储是指 发布:2025-05-14 09:46:39 浏览:446