beep and sound n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
BEEP and Sound PowerPoint Presentation
Download Presentation
BEEP and Sound

Loading in 2 Seconds...

play fullscreen
1 / 21

BEEP and Sound - PowerPoint PPT Presentation


  • 129 Views
  • Uploaded on

BEEP and Sound. 授課: ANT 日期: 2010/5/26. 授課內容. BEEP 播放音樂 use System 播放音樂 use PlaySound 簡易使用 windows.h MessageBox. About BEEP. 最簡單的警示音,利用 ASCII 裡的基本設定。 #include <stdio.h> #include <stdlib.h> #include <windows.h> int main() { printf("%c",7); Sleep(1000);

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'BEEP and Sound' - jaquelyn-albert


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
beep and sound

BEEPand Sound

授課:ANT

日期:2010/5/26

slide2
授課內容
  • BEEP
  • 播放音樂 use System
  • 播放音樂 use PlaySound
  • 簡易使用windows.h
    • MessageBox
about beep
About BEEP

最簡單的警示音,利用ASCII裡的基本設定。

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

int main()

{

printf("%c",7);

Sleep(1000);

printf("%c", '\a' );

return 0 ;

}

slide4
BEEP函式
  • C除了可利用 printf(“%c”, ‘\a’ );產生 beep單純一聲外,尚可利用 Beep 指令來完成單音的曲子、音階。
  • 運用windows.h裡的函式
    • Beep(int dwFreq, int dwDuration);
    • 第一個參數dwFreq為音階頻率
    • 第二個參數dwDuration為延遲時間
  • 可依個人需求自訂延遲時間來分別判斷一拍及半拍. ex : 600 為一拍 => 300 便是半拍.
ex10 1 1
小範例 ex10-1-1
  • 這是一個利用蜂鳴器發出

簡易音階的小範例。

  • 切記:請在無人時實作,

因為真的很吵。

ex10 1 2
小蜜蜂範例 ex10-1-2

#include<windows.h>

#include<conio.h>

int main()

{

int row,col;

int voice[16][4]={{700,600,600,0},{650,550,550,0},{500,550,600,650},{700,700,700,0},

{700,600,600,0},{650,550,550,0},{500,650,700,700},{600,0,0,0},

{550,550,550,550},{550,600,650,0},{600,600,600,600},{600,650,700,0},

{700,600,600,0},{650,550,550,0},{500,600,700,700},{500,0,0,0}} ;

int tempo[16][4]={{1,1,2,0},{1,1,2,0},{1,1,1,1},{1,1,2,0},{1,1,2,0},{1,1,2,0},{1,1,1,1},{4,0,0,0},

{1,1,1,1},{1,1,2,0},{1,1,1,1},{1,1,2,0},{1,1,2,0},{1,1,2,0},{1,1,1,1},{4,0,0,0}};

for(row=0; row<16; row++) {

for(col=0; col<4; col++) {

Beep(voice[row][col],tempo[row][col]*350);

}

}

return 0;

}

use system
播放音樂 use System
  • 使用系統預設的播放程式。。
  • 它不是背景音樂,程式想繼

續執行必須要關閉播放器。

use playsound
播放音樂 use PlaySound
  • PlaySound是用來播放音樂的一個windows.h函式。其函式格式如下:
    • BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
    • 參數意義 –
      • 第一個參數可以是音效檔案名稱或內定的聲音別名或程式資源 。
      • 第二個參數只有當第一個參數是程式資源時才可以用,通常為NULL。
      • 第三個參數指定第一個參數是檔案名稱以及同步播放選項
      • 如PlaySound( "yoursound.wav" , NULL, SND_FILENAME | SND_SYNC );
playsound
使用PlaySound的事前準備
  • 由於此項函式較為特殊,因此必須使用到winmm.lib,屬於系統的LIB檔。在codeblocks底下,並沒有此lib檔。
    • 首先必須下載winmm.lib (在壓縮檔裡有附。)
    • 接著,將此lib檔放置到與.c檔同一個資料夾底下。
    • 在codeblocks的”setting” ->

“Compiler and debugger settings” ->

左欄“Global compiler settings” ->

“Linker settings”

    • 按add並將此lib檔加入。
playsound1
使用PlaySound的事前準備(續)
  • 做完這動作後,還必須在程式中加入
    • #pragma comment(lib,“winmm.lib”)
    • #include <windows.h>
    • #include <mmsystem.h>

注意include時,window.h要放在mmsystem.h之

上不然會有錯誤產生。

  • 但是此函式目前只能播放.wav

格式的聲音檔

playsound2
PlaySound
  • 此函式的第三個參數為播放標誌,可有下列的選擇:
    • SND_FILENAMEpszSound參數指定了WAVE檔名
    • SND_SYNC 做同步播放,在播放完後才返回
    • SND_ASYNC 做非同步播放,函數在開始播放後立即返回
    • SND_LOOP 重複播放聲音,但必須與SND_ASYNC同時使用
    • SND_NODEFAULT 不播放如果沒有聲音的音效,如果沒使用則當發現

沒有聲音可撥放時會撥放音效。

    • SND_PURGE停止所有與調用任務有關的聲音。若參數pszSound

為NULL,就停止所有的聲音,否則停止pszSound

指定的聲音。

詳情參考 http://chenzhand1.blog.hexun.com.tw/43298441_d.html

  • 第三個參數在使用時可以使用”|”組合函式的功能。
    • 如SND_FILENAME | SND_ASYNC 表示指定了第一個參數為播放的檔案且做非同步播放。
ex10 2
範例 ex10-2
  • 注意

音樂檔名在輸入時,請記得要輸入完整的位址

  • 另外參數中的路徑使用兩個連續的反斜杠轉義代表一個反斜杠。
windows h messagebox
簡易windows.h使用 -MessageBox
  • 我們為了要讓程式看起來有點變化,可用messagebox產生一個對話方塊。當然,它會有自己的標題、 文字訊息及按鍵鈕等。
  • 使用很簡單,如下

#include<windows.h>

int main()

{

MessageBox(NULL , “Hello World” , “^^",MB_OK|MB_ICONASTERISK);

return 0 ;

}

messagebox
MessageBox
  • 格式如下:

int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UNIT uType)

  • 四個參數分別是:

1) HWnd :父窗口的控制碼。

2) LpText :想要顯示的文字字串的指標。

3) LpCaption :對話方塊標題字串的指標。

4) UType :顯示在對話方塊上的小圖示的類型。

詳細資料參考

http://msdn.microsoft.com/en-us/library/ms645505(VS.85).aspx

messagebox1
MessageBox(續)
  • 小範例中第四個參數MB_OK及MB_ICONASTERISK,分別表示有個OK的按鈕及有個 的圖示。
  • 關於return值,如果messagebox有Cancel按鍵(ex. MB_OKCANCEL,表示式窗上有OK與Cancel按鍵),則按下它的回傳值會是IDCANCEL,另外如果是按鍵盤上的Esc鍵也會回傳IDCANCEL。
  • 按鍵類型與圖示類型請參考上頁連結。
ex10 3
範例 ex10-3
  • 利用messagebox的回

傳值,在主程式執行下

一步的動作。

  • 對應到按取消鍵,則

回傳IDCANCEL,而重

試則是IDRETRY。

kbhit
複習kbhit
  • Kbhit()的使用在於判斷是否有按按鍵。從系統來看就是說,此函式在於判斷暫存器buffer,是否有資料。
  • 當我們按鍵盤按鍵時,電腦會將按鍵字元存於keyboard buffer內,而kbhit如果判斷buffer內有資料則回傳非 0的值,無資料則回傳 0 。
  • 注意:當使用kbhit()後,並未使用getch()函式的話,buffer內的資料會一直存在,再下一次按按鍵時會繼續儲存,直到buffer滿為止,因此往後的kbhit()持續回傳 1 。
kbhit1
複習kbhit(續)
  • 因此從下面程式就可以知道瞭解問題。
lab 10
Lab 10
  • 簡易wav播放器

透過本程式可讓使用者簡易的播放與更換背景音樂,本程式共有三種音樂讓使用者自行選擇。

  • 流程 –
    • 使用者一開始(1)試聽 (2)離開
    • 在選擇試聽後, 出現現有的歌單, 並選擇。
    • 在選擇某一音樂後,使用者有兩種選項(a)試聽秒數 (b)任意, 在(a)中給予試聽的秒數,在(b)中則提供歌曲播放不中斷直到按到鍵盤任一按鍵為止。
    • 當歌曲非意外性停止或中斷, 也就是秒數到了或者選(b)的人按了鍵盤則回到最初選擇(1)試聽 (2)離開
lab 101
Lab 10解釋
  • 首先創建一txt文件檔,內含歌曲名稱,為求方便,歌曲名由助教定義,避免作業繳交時上傳檔案過大,作業上傳時不需要上傳音樂檔。
  • 同時歌曲一律放在C槽底下,其相對應的位址將會是 C:\blacksky.wav C:\OhYeah.wav C:\family.wav
  • 歌單檔名為song,檔案型態是txt,其中共有三筆資料
  • 由於歌曲檔案很大轉檔後每個約為40MB,故在程式撰寫時,測試程式時請自行找尋wav音樂檔,並命名為歌單的名稱,位置放置C槽底下,做測試。
  • 另外實驗室提供winmm.lib檔