原创 AMR音頻結構

編碼方式 AMR有多種編碼方式,每種編碼方式的採樣頻率不同:     規格 比特率(kbps) 音頻幀大小(字節) 幀頭(字節) FT  0   AMR 4.75     13  04 0000

原创 AMR解碼編程(C++直接用opencore-amr-0.1.3庫)

先定義每種幀的大小數組 const int sizes[] = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 6, 5, 5, 0, 0, 0, 0 }; 初始化解碼器 void *m_pAmr = De

原创 speex前置處理

1.簡介 語音在採集和傳輸過程中,由於語音源的差異、信道的衰減、噪聲的干擾以及遠近效應,導致信號幅度相差很大。所有在語音處理之前我們需要對語音數據進行前置處理,包括預處理(AGC、VAD、迴音消除)、重採樣和噪聲抑制。 所有的代碼都

原创 自增自減與左值

以自增爲例,(i++)不能做左值而(++i)可以,看下實現: //前綴形式,++i int &int::operator++() { *this+=1; return *this; } //後綴形

原创 文件關閉後馬上再打開另一個文件兩個句柄會一樣

for(int i = 0; i < 5; i++) { FILE *pF = fopen("123.txt", "wb"); printf("%x\n", pF); fclose(pF); pF = NULL; } 按這代碼測試每次都

原创 opus編譯庫到arm上面用

一、可以到https://opus-codec.org/下載源碼 進入到目錄 % ./configure CFLAGS="-Os" --enable-fixed-point --enable-intrinsics --host=

原创 srand和rand的使用

只使用rand會按一定規律生成一樣的隨機數, srand函數是給rand提供種子。 每次要生成不同的隨機數要用srand提供不同的種子, 一般用srand((unsigned)time(NULL));以時間爲種子可以保證每次不同。 ran

原创 android

編譯問題:SLES/OpenSLES.h: No such file or directory解決方法:ndk-build TARGET_PLATFORM=android-9

原创 關於純C++編寫的com組件在vb.net等其他語言引用出錯問題

純C++編寫com組件網上的例子蠻多大家可以自選搜索,寫出來的com可以註冊成功VC調用也沒問題,但是用vb.net去調用時引用卻不行會有以下錯誤這是因爲沒有把TypeLib寫入註冊表,添加以下寫註冊表代碼就可以了HRESULT Regi

原创 golang emoji表情處理

package util import ( "regexp" "strconv" "strings" ) //表情解碼 func UnicodeEmojiDecode(s string) string {

原创 用MinGW的gcc編譯com組件

因爲特殊原因需要用gcc編譯com組件還不是vc首先代碼得寫純C++的,不用借用ATL和MFC,這個網上蠻多的我們用到的是需要idl文件的,借用VC的MIDL得到XX_i.c XX_p.c  XX.h文件還有tlb文件主要是tlb文件,沒

原创 C++獲取網關(linux)

這裏只討論最簡單與直接的方法,和route命令一樣,從/proc/net/route讀取,代碼如下: bool GetIPV4Gateway(const char * pNICName, char *pGateway, unsigned

原创 golang調用javascript文件裏的函數

這裏要用到otto---Go語言實現的JavaScript 解釋器(github.com/robertkrimen/otto) 假設plugins.js裏的內容有: function addnum(a, b) { re

原创 qt creator編譯opus庫

把下載來的Opus源代碼全都加入到項目中除了arm、tests及mips目錄 然後在.pro文件里加入 INCLUDEPATH += include celt silk silk/float silk/fixed . DEFINES

原创 linux系統調用64位彙編與32位彙編不同及兼容

一、不同 1.系統調用號不同。比如x86中sys_write是4,sys_exit是1;而x86_64中sys_write是1, sys_exit是60。linux系統調用號實際上定義在/usr/include/asm/unistd_32