第三章 系統實作
3.3 網站系統架構分析
3.3.3 鈴聲服務系統
圖 3-17 鈴聲系統圖
鈴聲服務系統提供 2 種功能:
1.自編鈴聲:它提供一個介面給使用者編輯鈴聲內容以及對方電話,
讓使用者能編輯內容訊息,並且發送出去。
2.鈴聲下載:在鈴聲下載裡有許多已經分類好的現成鈴聲可以直接點 選,讓使用者不必再自行編寫,可以依自己的需求尋找分類並且只要 點一下就可以發送。
鈴聲服務系統
自編鈴聲 鈴聲下載
系 統 流 程 1. 自編鈴聲
圖 3-18 鈴聲發聲流程圖
自編鈴聲的構想很簡單,就是讓使用者自己輸入音符,然後再讓那 些音符發出聲音這樣就可以自己輸入音符來編曲了,然後再透過編碼 把那些音符轉換成手機鈴聲格式的內碼就可以了,這部分的重點就是 在讓音符發出聲音,還有轉換內碼這兩個部分,一開始先把程式寫成 win32 Api 然後再把他改寫成網路版的,使用者可以直接在網路上編曲 試聽,然後再把編好的曲子透過簡訊發送系統送到使用者所想要送到 的手機,可以隨自己的喜好任意編出自己要的曲子,也可以直接選擇 已經預設編好的曲子送出去,然後再透過使用者計費系統紀錄你送了
鈴聲服務網頁
鈴聲服務程式
使用者 win32.api 呼叫
使用者
發出聲音
多少歌曲出去來計算以後要收多少錢的依據。
NOKIA 手機的內碼:
<ringing-tones-text-transfer-language> :=
<name> <sep> [<defaults>] <sep> <note-command>+
<name> := <char>+ ; maximum name length 11 characters
<sep> := ":"
<defaults> :=
<def-note-duration> | <def-note-scale> | <def-beats> |
<def-volume> | <def-style>
<def-note-duration> := "d=" <duration>
<def-note-scale> := "o=" <scale>
<def-beats> := "b=" <beats-per-minute>
<def-volume> := "v=" <volume>
<def-style> := "s=" <style>
<beats-per-minute> := 25,28,...,900 ; decimal value
<volume> := 0..15 ; 0 - no tone, 15 - maximal volume, decimal value
<style> := 1 | ; normal 2 | ; continuous 3 ; staccato
; If not specified, defaults are
; 4 = duration
; 5 = scale
; 63 = beats-per-minute
; 7 = volume
; 1 = style
<note-command> :=
[<duration>] <note> [<scale>] [<special-duration>]
<delimiter>
<duration> :=
"1" | ; Full 1/1 note "2" | ; 1/2 note
"4" | ; 1/4 note "8" | ; 1/8 note "16" | ; 1/16 note
"32" | ; 1/32 note
<scale> :=
"4" | ; Note A is 440Hz "5" | ; Note A is 880Hz "6" | ; Note A is 1.76 kHz "7" ; Note A is 3.52 kHz
<special-duration> :=
"." | ; Dotted note
";" | ; Double dotted note
"&" ; 2/3 length
<delimiter> := ","
; End of specification
依照手機內碼的編碼然後再讓程式發出那些音階所代表的頻率的
Public Sub device()
Dim Index As Short curDevice = Index - 1
rc = midiOutClose(hmidi)
Module Module1
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function midiOutGetNumDevs Lib "winmm" () As Short Declare Function midiOutGetDevCaps Lib "winmm.dll" () Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Integer) As Integer
Declare Function midiOutOpen Lib "winmm.dll" (ByRef lphMidiOut As Integer, ByVal uDeviceID As Integer, ByVal dwCallback As Integer, ByVal dwInstance As Integer, ByVal dwFlags As Integer) As Integer
Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Integer, ByVal dwMsg As Integer) As Integer
End Module
這些都是程式裡面所要用到的一些函式庫,必須要先宣告才可以使 用,我是把他另外寫到 module 這裡面,這樣寫有個好處就是以後要修 改時可以知道自己用了哪些函式庫,如果以後要增加或是修改時,就 直接到 module 裡面找,而且最重要的是非常清楚一目了然,你可以很 快的知道自己用了哪些函式庫。
Public Sub musicbase(ByVal index As Integer)
midimsg = &H90S + ((note + index) * &H100S) + (voule *
&H10000)
midiOutShortMsg(hmidi, midimsg) 高是 255 越高則聲音的音量越大,midiOutShortMsg(hmidi, midimsg) 就是把你設定好要發出的聲音送給 midi 的發聲裝置他就會發出你所設 的 midimsg = &H80S + ((note + index) * &H100S)則是在最後發出一 段較低頻率的聲音,這樣兩個合起來才是一個完整的音符,由高然後
稍微變低這樣聲音聽起來才會圓滑比較順耳,而和絃則是利用多個單 音同時撥放一段時間,在搭配不同的區段用不同的和絃就是一首悅耳 的曲子了,不過因為不是每支手機都有和絃功能而且每支手機的廠牌 不一樣,裡面的內部設定還有編碼也不一樣,沒有標準的規格,所以 主要是以 NOKIA 的手機為主,設計出單音的鈴聲撥放。
midimsg = &H0
而這個是把聲音直接變成無聲的作用,因為發出聲音會持續一段短暫 的時間,所以必須要直接強制它變成無聲讓他停下來,這樣在連續撥 放時才能夠讓聲音不會全都連在一起,這一段是研究最久的地方,因 為資料很難找你要自己去嘗試多少的數字會發出什麼聲音,要測試許 多次,然後在研究出要降低聲音讓他衰弱下來聽起來才會悅耳,這些 都是花了許多時間去測試研究的,然後再撥放時遭遇到聲音連在一起 的困難,測試了好幾個方法才想到要加一個結束聲音把聲音停住。
在把音符跟音符之間加上不同的拍子,就可以撥放出一段簡單的音樂 了,然後在把對應的音符和拍子轉換成手機接收鈴聲訊息的格式傳送 給手機,手機就可以收到你自己所編輯的鈴聲了。
,
而這個程式的介面是利用 vb.net 裡面的圖片按鈕,vb.net 的優點就是 可以直接利用一堆元件設計出介面,很快的就可以把你所想要的介面 做出來,利用它的圖片按鈕然後就可以把按鈕加入你所要的圖案,而 這幾個圖片是利用小畫家做出來的圖片,在把圖片加進去按鈕裡面,
就可以做出這個鍵盤了。
2.鈴聲下載
失敗
成功
圖 3-19 鈴聲下載流程圖 a.會員登入成功之後即可使用鈴聲服務系統 b.編輯自己的鈴聲
c.發送網頁
d.判斷簡訊發送後是否有成功 e.簡訊發送成功
f.簡訊發送失敗後會出現訊息告知使用者訊息發送失敗並且會回到發 送網頁
a.會員登入
b.鈴聲編輯介面
c.鈴聲發送網頁
d.判斷是否發 送成功
f.顯示發送失敗 訊息
e.發送成功