多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > Qt--使用RtAudio進行錄音以及播放

Qt--使用RtAudio進行錄音以及播放

來源:程序員人生   發(fā)布時間:2016-11-21 08:32:41 閱讀次數(shù):6428次

其實,本篇博客主要是介紹1下RtAudio,只是在qt中使用罷了!

甚么是RtAudio?
RtAudio provides a common API for realtime audio input/output across Linux (native ALSA, Jack, and OSS), Macintosh OS X (CoreAudio and Jack), and Windows(DirectSound, ASIO and WASAPI) operating systems.

官方地址:
http://www.music.mcgill.ca/~gary/rtaudio/

github地址:
https://github.com/thestk/rtaudio

下載rtaudio:
最新版本 (22 February 2016): Version 4.1.2

官方文檔利用例子:

#include "RtAudio.h" #include <iostream> #include <cstdlib> #include <cstring> int record( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) { if ( status ) std::cout << "Stream overflow detected!" << std::endl; // Do something with the data in the "inputBuffer" buffer. return 0; } int main() { RtAudio adc; if ( adc.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; exit( 0 ); } RtAudio::StreamParameters parameters; parameters.deviceId = adc.getDefaultInputDevice(); parameters.nChannels = 2; parameters.firstChannel = 0; unsigned int sampleRate = 44100; unsigned int bufferFrames = 256; // 256 sample frames try { adc.openStream( NULL, &parameters, RTAUDIO_SINT16, sampleRate, &bufferFrames, &record ); adc.startStream(); } catch ( RtAudioError& e ) { e.printMessage(); exit( 0 ); } char input; std::cout << "\nRecording ... press <enter> to quit.\n"; std::cin.get( input ); try { // Stop the stream adc.stopStream(); } catch (RtAudioError& e) { e.printMessage(); } if ( adc.isStreamOpen() ) adc.closeStream(); return 0; }

Qt中的利用

功能:
1左聲道
2右聲道
3雙聲道

封裝1個類,叫ThreadRecord,在多線程中使用RrAudio,固然是繼承QThread:

class ThreadRecord :public QThread { public: ThreadRecord(); static int record(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData); bool flag; int type;//通過type進行判斷是使用左聲道、右聲道、雙聲道 protected: void run(); private: RtAudio adc; RtAudio::StreamParameters input; RtAudio::StreamParameters output; };

實現(xiàn)threadrecord.cc:

int ThreadRecord::record(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData) { if (status) cout << "Stream overflow detected!" << std::endl; short* output = static_cast<short*>(outputBuffer); short* input = static_cast<short*>(inputBuffer); short n = nBufferFrames; int i = *(static_cast<int*>(userData)); if(i == 2) { for (i = 0; i < nBufferFrames; i += 1) { output[i] = input[i]; } } else { for (; i < nBufferFrames; i += 2) { output[i] = input[i]; } } return 0; } void ThreadRecord::run() { //adc為成員變量:RtAudio adc_; // adc_.getDeviceCount()取得音頻裝備數(shù)量 for(int i = 0 ; i < adc_.getDeviceCount() ; i++) { qDebug()<< i << adc_.getDeviceInfo(i).name.c_str(); } if (adc_.getDeviceCount() < 1) { cout << "\nNo audio devices found!\n"; exit( 0 ); } //adc_.getDefaultInputDevice();取得默許輸入裝備 input.deviceId = adc_.getDefaultInputDevice(); input.nChannels = 2; input.firstChannel = 0; output.deviceId = adc_.getDefaultOutputDevice(); output.nChannels = 2; output.firstChannel = 0; unsigned int sampleRate = 44100; unsigned int bufferFrames = 256; try { adc_.openStream(&output, &input, RTAUDIO_SINT16, sampleRate, &bufferFrames, &record, static_cast<void*>(&type), NULL, &ErrorCallback); adc_.startStream(); } catch (RtAudioError& e) { e.printMessage(); exit(0); } while (flag); try { adc_.stopStream(); } catch (RtAudioError& e) { e.printMessage(); } if (adc_.isStreamOpen()) adc_.closeStream(); }

使用,為了節(jié)省篇幅,只寫1個函數(shù):
type=0 左聲道
type=1 右聲道
type=2 雙聲道

void Recording::onLeftSoundButtonClicked() { if (thread_record.isRunning()) thread_record.exit(0); thread_record.flag = true; thread_record.type = 0; thread_record.start(); }

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 性福利影院 | 国产男女爽爽爽爽爽免费视频 | 免费精品美女久久久久久久久久 | 久久手机看片 | 免费人成毛片乱码 | 国产系列 视频二区 | 看一级毛片国产一级毛片 | 欧美日韩亚| 黑人疯狂做人爱视频 | 亚州三级视频 | 欧美日韩一区二区三区麻豆 | 欧美亚洲国产精品久久久 | 最近免费中文字幕视频高清在线看 | 欧美人与动性xxxxx杂性 | 亚洲精品aⅴ中文字幕乱码 亚洲精品h | 精品国产a| 欧美精品日韩一区二区三区 | 毛片爱爱 | yellow中文字幕在线高清 | 亚洲国产天堂久久综合2261144 | 亚洲视频第一页 | 99精品日韩 | 亚洲小说另类 | 欧美日韩亚洲二区在线 | 欧美性video高清精品 | 国人精品视频在线观看 | 亚洲qingse中文字幕久久 | 日本人69式视频最长 | 真实国产乱人伦在线视频播放 | 国产专区自拍 | 欧美综合视频在线观看 | 国产精品欧美在线不卡 | 色人阁在线 | 国产精品视频福利 | 亚洲国产2017男人a天堂 | 成人福利片 | 男人都懂的www网站免费观看 | 三级在线国产 | 亚洲一逼 | 欧美成在线观看 | 国产成人毛片 |