这篇教程C++ waveInAddBuffer函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中waveInAddBuffer函数的典型用法代码示例。如果您正苦于以下问题:C++ waveInAddBuffer函数的具体用法?C++ waveInAddBuffer怎么用?C++ waveInAddBuffer使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了waveInAddBuffer函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: mainint main(){ HWAVEIN inStream; HWAVEOUT outStream; WAVEFORMATEX waveFormat; WAVEHDR buffer[4]; // pingpong buffers waveFormat.wFormatTag = WAVE_FORMAT_PCM; // PCM audio waveFormat.nSamplesPerSec = 22050; // really 22050 frames/sec waveFormat.nChannels = 2; // stereo waveFormat.wBitsPerSample = 16; // 16bits per sample waveFormat.cbSize = 0; // no extra data waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 2; waveFormat.nAvgBytesPerSec = waveFormat.nBlockAlign * waveFormat.nSamplesPerSec; // Event: default security descriptor, Manual Reset, initial non-signaled HANDLE event = CreateEvent(NULL, TRUE, FALSE, "waveout event"); waveInOpen( &inStream, WAVE_MAPPER, &waveFormat, (unsigned long)event, 0, CALLBACK_EVENT); waveOutOpen(&outStream, WAVE_MAPPER, &waveFormat, (unsigned long)event, 0, CALLBACK_EVENT); // initialize the input and output PingPong buffers int index; for(index = 0; index < 4; index++) { buffer[index].dwBufferLength = NUM_FRAMES * waveFormat.nBlockAlign; buffer[index].lpData = (void *)malloc(NUM_FRAMES * waveFormat.nBlockAlign); buffer[index].dwFlags = 0; waveInPrepareHeader( inStream, &buffer[index], sizeof(WAVEHDR)); } ResetEvent(event); for(index= 0; index < 4; index++) // queue all buffers for input waveInAddBuffer(inStream, &buffer[index], sizeof(WAVEHDR)); waveInStart(inStream); while(!( buffer[1].dwFlags & WHDR_DONE)); // poll(!) for 2 full input buffers // move the two full buffers to output waveOutWrite(outStream, &buffer[0], sizeof(WAVEHDR)); waveOutWrite(outStream, &buffer[1], sizeof(WAVEHDR)); int inIndex = 2, outIndex = 0; // the next input and output to watch while(1) { // poll for completed input and output buffers if(buffer[inIndex].dwFlags & WHDR_DONE) { // input buffer complete? waveInAddBuffer( inStream, &buffer[inIndex], sizeof(WAVEHDR)); inIndex = (inIndex+1)%4; // next buffer to watch for full } if(buffer[outIndex].dwFlags & WHDR_DONE) { // output buffer complete? waveOutWrite( outStream, &buffer[outIndex], sizeof(WAVEHDR)); outIndex = (outIndex+1)%4; // next buffer to watch for empty } }}
开发者ID:Salimlou,项目名称:AudioAnecdotes,代码行数:60,
示例2: waveInAddBufferint audioStreamer_waveOut::Read(char *buf, int len) // returns 0 if blocked, < 0 if error, > 0 if data{ if (!m_hwi) return -1;#if 0 // lame, this doesnt really do what we want it to // check to see if all are full, and if so, kill a lot of em { int x; int cnt=0; for (x = 0; x < m_bufs.GetSize(); x ++) { WAVEHDR *th = (WAVEHDR *) m_bufs.Get(x)->Get(); if (th->dwFlags & WHDR_DONE) cnt++; } if (cnt >= m_bufs.GetSize()-1) {// audiostream_onover(); for (x = 0; x < m_bufs.GetSize(); x ++) { if (x != m_whichbuf) { WAVEHDR *th = (WAVEHDR *) m_bufs.Get(x)->Get(); if (th->dwFlags & WHDR_DONE) { th->dwBytesRecorded=0; th->dwFlags = WHDR_PREPARED; waveInAddBuffer(m_hwi,th,sizeof(WAVEHDR)); } } } } }#endif WAVEHDR *th = (WAVEHDR *) m_bufs.Get(m_whichbuf)->Get(); while (!(th->dwFlags & WHDR_DONE)) { Sleep(WO_SLEEP); } len=min(len,(int)th->dwBytesRecorded); memcpy(buf,th->lpData,len); th->dwBytesRecorded=0; th->dwFlags = WHDR_PREPARED; waveInAddBuffer(m_hwi,th,sizeof(WAVEHDR)); if (++m_whichbuf >= m_bufs.GetSize()) m_whichbuf=0; return len;}
开发者ID:libninjam,项目名称:libninjam-win,代码行数:51,
示例3: printf//--------------------------------------------------------------------------------------// Class: SoundResources // Method: (protected) _prepareBuffer // Description: Prepares the internal buffers for the doble buffering. //--------------------------------------------------------------------------------------void SoundResources::_prepareBuffers(void){ //---------------------------------------------------------------------- // Preparing all memory buffer allocation //---------------------------------------------------------------------- m_WaveHeader[2].dwBufferLength = m_WaveHeader[1].dwBufferLength = m_WaveHeader[0].dwBufferLength = dwBufferLength; m_WaveHeader[0].lpData = (char *)VirtualAlloc(0, m_WaveHeader[0].dwBufferLength, MEM_COMMIT, PAGE_READWRITE); m_WaveHeader[1].lpData = (char *)VirtualAlloc(0, m_WaveHeader[1].dwBufferLength, MEM_COMMIT, PAGE_READWRITE); m_WaveHeader[2].lpData = (char *)VirtualAlloc(0, m_WaveHeader[2].dwBufferLength, MEM_COMMIT, PAGE_READWRITE); //---------------------------------------------------------------------- // Initialize dwFlags and dwLoops to 0. This seems to be necesary according to the // Microsoft Windows documentation //---------------------------------------------------------------------- m_WaveHeader[0].dwFlags = m_WaveHeader[1].dwFlags = m_WaveHeader[2].dwFlags = 0L; m_WaveHeader[0].dwLoops = m_WaveHeader[1].dwLoops = m_WaveHeader[2].dwFlags = 0L; //---------------------------------------------------------------------- // Initialize the headers //---------------------------------------------------------------------- if ((m_err = waveInPrepareHeader(m_WaveInHandle, &m_WaveHeader[0], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error preparing WAVEHDR -- %08X/n", m_err); if ((m_err = waveInPrepareHeader(m_WaveInHandle, &m_WaveHeader[1], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error preparing WAVEHDR -- %08X/n", m_err); if ((m_err = waveInPrepareHeader(m_WaveInHandle, &m_WaveHeader[2], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error preparing WAVEHDR -- %08X/n", m_err); //---------------------------------------------------------------------- // It is necessary to queue the two buffers. //---------------------------------------------------------------------- if ((m_err = waveInAddBuffer(m_WaveInHandle, &m_WaveHeader[0], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error queueing WAVEHDR 1! -- %08X/n", m_err); if ((m_err = waveInAddBuffer(m_WaveInHandle, &m_WaveHeader[1], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error queueing WAVEHDR 2! -- %08X/n", m_err); if ((m_err = waveInAddBuffer(m_WaveInHandle, &m_WaveHeader[2], sizeof(WAVEHDR)))) printf("yarpsounddriver: Error queueing WAVEHDR 2! -- %08X/n", m_err);}
开发者ID:robotology-legacy,项目名称:yarp1,代码行数:55,
示例4: RecDataint RecData(int i){ WORD wResult; SendInBuffers--; if (!StopRecord) { InFillBuffer(i); wResult = waveInAddBuffer(hWaveIn,WaveInBuf[i].lpWaveHdr,sizeof(WAVEHDR)); if (wResult != 0) { WaveInFreeAll(); return 0; } SendInBuffers++; } else { if (!SendInBuffers) { WaveInFreeAll(); StopRecord=FALSE; waveInClose(hWaveIn); } } return 1;}
开发者ID:scareface972,项目名称:nabaztag-source-code,代码行数:27,
|