<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在程序中,很有可能會涉及到播放一些音頻文件(比如:.wav文件)和音頻數據,這個問題怎么解決呢?VC++中想要播放一個音頻文件(.wav)是很容易的,只要調用WIndows API函數PlaySound()就可以了,但是,如果您想播放自己在程序中產生的一段音頻數據,就不是那么簡單了,需要利用WIndows wave I/O API的幾個函數來實現。 下面結合實例來說明(**完整實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/3677328](http://download.csdn.net/detail/margin1988/3677328)**,該例子利用WIndows wave I/O API 函數,實現了播放自定義的一段音頻數據(通過sin()函數產生);并且使用了PlaySound()函數播放“250.wav”文件): ~~~ //需包含的頭文件 #include <MMSystem.h> #pragma comment(lib,"winmm.lib") //PlaySound()函數和其他WIndows wave I/O API 函數的使用 #include "math.h"//sin()函數的使用 ~~~ 1.播放文件: ~~~ CString path; path.Format("%s250.wav",g_BasePath); //g_BasePath的取值不用多說,前面已詳細介紹了。 PlaySound(_T(path),0,SND_FILENAME|SND_ASYNC); ~~~ 2.播放數據: (1)確定音頻數據的格式及內容: ~~~ int rate=1000; //刺激率 int sampleRate = 44100; //采樣率 const int NUMPTS = (int) (44100 * 0.5); // 0.5s short int waveOut[NUMPTS];//音頻數據 //內容 for (int i=0;i<NUMPTS;i++) { waveOut[i] = (short int)ceil(sin(2*3.1415926*rate*i/sampleRate)*20000); } //格式 WAVEFORMATEX pFormat; pFormat.wFormatTag=WAVE_FORMAT_PCM; //simple,uncompressed format pFormat.nChannels=1;//1=mono, 2=stereo pFormat.nSamplesPerSec=sampleRate; // 44100 pFormat.nAvgBytesPerSec=sampleRate*2; // = nSamplesPerSec * n.Channels * wBitsPerSample/8 pFormat.nBlockAlign=2; // = n.Channels * wBitsPerSample/8 pFormat.wBitsPerSample=16; //16 for high quality, 8 for telephone-grade pFormat.cbSize=0; ~~~ (2)打開一個給定的波形音頻輸出裝置: ~~~ HWAVEOUT hWaveOut; WAVEHDR WaveOutHdr; MMRESULT result; result = waveOutOpen(&hWaveOut, WAVE_MAPPER,&pFormat,0L, 0L, WAVE_FORMAT_DIRECT); if (result) { MessageBox(_T("Failed to open waveform output device.")); return; } ~~~ (3)準備波形數據塊: ~~~ WaveOutHdr.lpData = (LPSTR)waveOut; WaveOutHdr.dwBufferLength = NUMPTS*2; WaveOutHdr.dwBytesRecorded=0; WaveOutHdr.dwUser = 0L; WaveOutHdr.dwFlags = 0L; WaveOutHdr.dwLoops = 0L; waveOutPrepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR)); ~~~ (4)向給定音頻媒體中輸出波形數據塊: ~~~ result = waveOutWrite(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR)); if (result) { MessageBox(_T("Failed to play sound")); return; } ~~~ (5)清除準備: ~~~ // Wait until finished sound play do {} while (waveOutUnprepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR))==WAVERR_STILLPLAYING); ~~~ (6)關閉給定音頻媒體: ~~~ waveOutClose(hWaveOut); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看