Linux下的音訊採集與回放(轉)
Linux下的音訊採集與回放(轉)[@more@]作者: hotfire [文章出自: ]以下假設你對ioctl已有一定的認識及瞭解sndtools.h程式碼:#ifndef SNDTOOLS_H#define SNDTOOLS_H#include #define FMT8BITS AFMT_S8_LE #define FMT16BITS AFMT_S16_LE #define FMT8K 8000#define FMT16K 16000#define FMT22K 22000#define FMT44K 44000#define MONO 1#define STERO 2#ifndef VAR_STATICextern int devfd;extern int CapMask;#endif //ifndef VAR_STATIC//Open sound device, return 1 if open success//else return 0int OpenSnd();//Close sound deviceint CloseSnd();//Set record or playback format, return 1 if success//else return 0int SetFormat(int bits, int hz);//Set record or playback channel, return 1 if success//else return 1int SetChannel(int chn);//Recordint Record(char *buf, int size);//Playbackint Play(char *buf, int size);#endif //ifndef SNDTOOLS_Hsndtools.c程式碼:#include #include #include #include #include #define VAR_STATIC#include "sndtools.h"int devfd = 0;/** Open Sound device* Return 1 if success, else return 0.*/int OpenSnd(/* add by new version */int nWhich){if(devfd > 0)close(devfd);devfd = open("/dev/dsp", O_RDWR);if(devfd < 0)return 0;return 1;}/** Close Sound device* return 1 if success, else return 0.*/int CloseSnd(/* add by new version */int nWhich){close(devfd);devfd = 0;return 1;}/** Set Record an Playback format* return 1 if success, else return 0.* bits -- FMT8BITS(8bits), FMT16BITS(16bits)* hz -- FMT8K(8000HZ), FMT16K(16000HZ), FMT22K(22000HZ), FMT44K(44000HZ)*/int SetFormat(int bits, int hz){int tmp = bits;if( -1 == ioctl(devfd, SNDCTL_DSP_SETFMT, &tmp)){#ifdef DEBUG_WARNprintf("Set fmt to s16_little faile:%d
", nWhich);#endifreturn 0;}tmp = hz;if( -1 == ioctl(devfd, SNDCTL_DSP_SPEED, &tmp)){#ifdef DEBUG_WARNprintf("Set speed to %d:%d
", hz, nWhich);#endifreturn 0;}return 1;}/** Set Sound Card Channel* return 1 if success, else return 0.* chn -- MONO, STERO*/int SetChannel(int chn){int tmp = chn;if(-1 == ioctl(devfd, SNDCTL_DSP_CHANNELS, &tmp)){#ifdef DEBUG_WARNprintf("Set Audio Channel faile:%d
", nWhich);#endifreturn 0;}return 1;}/** Record* return numbers of byte for read.*/int Record(char *buf, int size){return read(devfd, buf, size);}/* * Playback* return numbers of byte for write.*/int Play(char *buf, int size){return write(devfd, buf, size);}test.c程式碼:// A sample to test record and playback.#include #include #include #include "sndtools.h"int main(){char *buf;int dwSize;if(!OpenSnd()){printf("Open sound device error!
");exit(-1);}SetFormat(FMT16BITS, FMT8K, WAVOUTDEV);SetChannel(MONO, WAVOUTDEV);buf = (char *)malloc(320);if(buf == NULL)exit(-1);for(int i = 0; i <1000; i++){dwSize = Record(buf, 640);dwSize = Play(buf, dwSize); }exit 1;}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944785/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .NET 音訊採集音訊
- 音視訊系列之iOS: 音訊採集 AudioUnitiOS音訊
- Windows Media Foundation 音視訊採集Windows
- iOS 實時音訊採集與播放Audio Unit使用iOS音訊
- Audio Unit採集音訊實戰音訊
- Android 音視訊採集那些事Android
- 轉載:iOS音視訊實時採集硬體編碼iOS
- 音視訊入門之音訊採集、編碼、播放音訊
- Linux下的OSS音訊介面程式設計(轉)Linux音訊程式設計
- android 音訊採集、FLTP重取樣與AAC編碼推流Android音訊
- L 波段射頻採集儲存回放系統
- 利用爬蟲採集音訊資訊完整程式碼示例爬蟲音訊
- JavaCV FFmpeg採集麥克風PCM音訊資料Java音訊
- Audio Queue 採集音訊實戰(支援不同格式)音訊
- iOS採集錄製音視訊API選擇推薦iOSAPI
- PHP採集商家資訊及採集方法概述(下)PHP
- Android音視訊(一) Camera2 API採集資料AndroidAPI
- 亞馬遜的主圖視訊/描述視訊有辦法同採集下來嗎?亞馬遜
- webrtc開發中,音訊實時對講採集的問題(ios mic mute)Web音訊iOS
- Linux下優秀的音訊編輯軟體Linux音訊
- linux系統下音訊製作軟體不完全指南(轉)Linux音訊
- Qt/C++音影片開發79-採集websocket影片流/開啟ws開頭的地址/音影片同步/儲存到MP4檔案/影片回放QTC++Web
- 小記:音訊格式轉化ByPython(下)音訊Python
- Linux 未決訊號集與訊號遮蔽字Linux
- iOS視訊流採集概述(AVCaptureSession)iOSAPTSession
- iOS視訊採集實戰(AVCaptureSession)iOSAPTSession
- iOS - 直播系列一:視訊採集iOS
- iOS 音訊壓縮(caf與amr互轉)iOS音訊
- Linux 安裝ffmpeg 實現音訊轉碼Linux音訊
- 轉轉容器日誌採集的演進之路
- Linux下使用"avconv"捕捉錄製桌面視訊及音訊Linux音訊
- Linux的kill命令與訊號控制(轉)Linux
- 小程式 音訊API採坑完全手冊音訊API
- 音訊轉錄文字音訊
- Linux下應用程式開發:QT的訊號與槽機制(轉)LinuxQT
- WebRTC與音訊音量Web音訊
- Qt/C++路徑軌跡回放/回放每個點訊號/回放結束訊號/拿到移動的座標點經緯度QTC++
- 高效的音訊製作與槍和車的音訊設計方案音訊