當前位置:首頁 » 編程語言 » 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並不難,關鍵在於一定要多寫,學起來才很順暢

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:525
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:24
linux485 發布:2025-07-05 14:38:28 瀏覽:304
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:754
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:431
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:698
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:240
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:685
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:282
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:834