⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 22. 声音与音乐.txt

📁 本书介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法
💻 TXT
📖 第 1 页 / 共 5 页
字号:
        
           static WAVEFORMATEX          waveformat ;
        
           int                                                                     iDummy ;
        
   
        
           switch (message)
        
           {
        
           case   WM_INITDIALOG:
        
                         hwndScroll = GetDlgItem (hwnd, IDC_SCROLL) ;
        
                          SetScrollRange(hwndScroll, SB_CTL, FREQ_MIN, FREQ_MAX, FALSE) ;
        
                          SetScrollPos (hwndScroll, SB_CTL, FREQ_INIT, TRUE) ;
        
                          SetDlgItemInt (hwnd, IDC_TEXT, FREQ_INIT, FALSE) ;
        
        
        
                          return TRUE ;
        
        
        
           case   WM_HSCROLL:
        
                          switch (LOWORD (wParam))
        
                          {
        
                          case   SB_LINELEFT:          iFreq -=  1 ;  break ;
        
                          case   SB_LINERIGHT:         iFreq +=  1 ;  break ;
        
                         case   SB_PAGELEFT:          iFreq /=  2 ;  break ;
        
                          case   SB_PAGERIGHT: iFreq *=  2 ;  break ;
        
             
        
                         case   SB_THUMBTRACK:
        
                                                 iFreq = HIWORD (wParam) ;
        
                                                 break ;
        
             
        
                          case   SB_TOP:
        
                                                 GetScrollRange (hwndScroll, SB_CTL, &iFreq, &iDummy) ;
        
                                                 break ;
        
             
        
                          case   SB_BOTTOM:
        
                                                GetScrollRange (hwndScroll, SB_CTL, &iDummy, &iFreq) ;
        
                                                 break ;
        
                          }
        
        
        
                          iFreq = max (FREQ_MIN, min (FREQ_MAX, iFreq)) ;
        
                          SetScrollPos (hwndScroll, SB_CTL, iFreq, TRUE) ;
        
                          SetDlgItemInt (hwnd, IDC_TEXT, iFreq, FALSE) ;
        
                          return TRUE ;
        
       
        
           case   WM_COMMAND:
        
                          switch (LOWORD (wParam))
        
                          {
        
                          case   IDC_ONOFF:
        
                                                 // If turning on waveform, hWaveOut is NULL
        
             
        
                                                 if (hWaveOut == NULL)
        
                                                {
        
                     // Allocate memory for 2 headers and 2 buffers
        

                   pWaveHdr1     = malloc (sizeof (WAVEHDR)) ;
        
                   pWaveHdr2     = malloc (sizeof (WAVEHDR)) ;
        
                   pBuffer1              = malloc (OUT_BUFFER_SIZE) ;
        
                   pBuffer2              = malloc (OUT_BUFFER_SIZE) ;
        

         if (!pWaveHdr1 || !pWaveHdr2 || !pBuffer1 || !pBuffer2)
        
                 {
        
         if (!pWaveHdr1) free (pWaveHdr1) ;
        
         if (!pWaveHdr2) free (pWaveHdr2) ;
        
         if (!pBuffer1)  free (pBuffer1) ;
        
         if (!pBuffer2)  free (pBuffer2) ;
        

         MessageBeep (MB_ICONEXCLAMATION) ;
        
         MessageBox (hwnd, TEXT ("Error allocating memory!"),
        
                     szAppName, MB_ICONEXCLAMATION | MB_OK) ;
        
         return TRUE ;
        
        }
        

                          // Variable to indicate Off button pressed
        

                                                                bShutOff = FALSE ;
        
                       
        
                          // Open waveform audio for output
        
                      
        
    waveformat.wFormatTag                                = WAVE_FORMAT_PCM ;
        
    waveformat.nChannels                                        = 1 ;
        
    waveformat.nSamplesPerSec                       = SAMPLE_RATE ;
        
    waveformat.nAvgBytesPerSec                  = SAMPLE_RATE ;
        
    waveformat.nBlockAlign                               = 1 ;
        
    waveformat.wBitsPerSample                       = 8 ;
        
    waveformat.cbSize                                    = 0 ;
        
                       
        
    if (waveOutOpen (&hWaveOut, WAVE_MAPPER, &waveformat,
        
DWORD) hwnd, 0, CALLBACK_WINDOW)!= MMSYSERR_NOERROR)
        
                                                 {
        
         free (pWaveHdr1) ;
        
         free (pWaveHdr2) ;
        
         free (pBuffer1) ;
        
        free (pBuffer2) ;
        

         hWaveOut = NULL ;
        
         MessageBeep (MB_ICONEXCLAMATION) ;
        
         MessageBox (hwnd, TEXT ("Error opening waveform audio device!"),
        
                     szAppName, MB_ICONEXCLAMATION | MB_OK) ;
        
        return TRUE ;
        
       }
        

        // Set up headers and prepare them
        

        pWaveHdr1->lpData                                               = pBuffer1 ;
        
        pWaveHdr1->dwBufferLength                                       = OUT_BUFFER_SIZE ;
        
        pWaveHdr1->dwBytesRecorded                                      = 0 ;
        
        pWaveHdr1->dwUser                                               = 0 ;
        
       pWaveHdr1->dwFlags                                              = 0 ;
        
        pWaveHdr1->dwLoops                                              = 1 ;
        
        pWaveHdr1->lpNext                                               = NULL ;
        
        pWaveHdr1->reserved                                             = 0 ;
        
                  
        
        waveOutPrepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
        

       pWaveHdr2->lpData                                               = pBuffer2 ;
        
        pWaveHdr2->dwBufferLength                                       = OUT_BUFFER_SIZE ;
        
        pWaveHdr2->dwBytesRecorded                                      = 0 ;
        
        pWaveHdr2->dwUser                                               = 0 ;
        
        pWaveHdr2->dwFlags                                              = 0 ;
        
       pWaveHdr2->dwLoops                                              = 1 ;
        
        pWaveHdr2->lpNext                                              = NULL ;
        
        pWaveHdr2->reserved                                             = 0 ;
        
                  
        
       waveOutPrepareHeader (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
        
                                                 }
        
       // If turning off waveform, reset waveform audio
        
                  else
        
                                                {
        
                                                         bShutOff = TRUE ;
        
                                                         waveOutReset (hWaveOut) ;
        
                                                 }
        
                                                 return TRUE ;
        
                          }
        
                          break ;
        

                                         // Message generated from waveOutOpen call
        
             
        
           case   MM_WOM_OPEN:
        
                          SetDlgItemText (hwnd, IDC_ONOFF, TEXT ("Turn Off")) ;
        

                                                         // Send two buffers to waveform output device
        
                  
        
                          FillBuffer (pBuffer1, iFreq) ;
        
                        waveOutWrite (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
        
                  
        
                          FillBuffer (pBuffer2, iFreq) ;
        
                          waveOutWrite (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
        
                          return TRUE ;
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -