當前位置:
首頁 > 娛樂 > 寂寞難挨,不妨用Matlab示個愛

寂寞難挨,不妨用Matlab示個愛

編輯:學妹

你的生活中是不是經常出現這樣的場景:

小師妹

師兄,可不可以幫我調一下程序呀~

可以,發過來吧

大師兄

小師妹

pso_control.m

5

pso_control.m

大師兄

接下來的劇情是這樣發展的:小師妹打開程序一運行,bug全部解除。同時程序結束後響起一段美妙的音樂(月亮代表我的心matlab版,此處用女神鄧麗君歌曲取代下啦)。

月亮代表我的心

香港之戀

鄧麗君

00:00/03:35

原來大師兄在小師妹原程序的結尾額外調用了一個「浪漫子程序」,從此,小師妹便深深地迷戀上了會調代碼又不失浪漫的大師兄……

我知道劇情有點狗血,本篇推文的目的其實是來分享技術的——如何在Matlab中製作一首樂曲,當然,你可以用它來撩妹,來把漢,來示愛,來求婚……

技術攻略

Matlab對廣大理工科學生來說相信都不陌生,這裡Matlab製作樂曲主要用到sound(X,fs)函數,該函數可以將一個輸入的正弦函數X轉化成相應的聲音信號。

其中fs表示採樣率,由於人耳能夠聽到的聲音範圍是20~20000Hz。根據採樣定理fs只需要大於40000即可,本人採樣率的設置採用了MP3的標準,即fs=44.1k.

如輸入正弦信號X=A*sin(2*pi*w*t)

信號幅值A——聲音的大小,這裡不需要關心

信號頻率w——聲音的高低,即音調

信號時長t ——聲音的長短

舉個栗子

假如我們知道鋼琴上的C4、A4鍵,即中音do、la(簡譜中的1、6),頻率為261.63Hz、440Hz,分別輸入

利用sound函數可得到時長0.1s的do音和時長0.05s的la音,兩個音的函數圖像分別為

一首樂曲可以看成是由不同音調的音按不同時長排列組合而成,而

音調——正弦波的頻率

時長——正弦波的長度

於是我們用不同頻率,不同長度的正弦波拼接,便可得到「婉轉悠揚」的曲子了。

將上面兩段函數拼接

可聽到兩個不同的音連續發出,其圖像為

看起來so easy,我們只需要將一首樂曲的每個音的音調和時長找出,對應地轉化為特定頻率和長度的正弦波片段,再拼接到一起,就ok啦。

這一點並不難辦,只要稍微懂點簡譜的人就能做到,不懂也沒關係,花個五分鐘基本就能學會。下面有幾點注意事項。

音調頻率

根據樂理中的「十二平均律」,由以下公式可計算中音do re mi fa sol la xi 的頻率,其p值分別為60 62 64 65 67 69 71,相應高音和低音的頻率計算時在中音的p值上分別加減12.

音符時長

依據下表,只需要確定全音符的時長,就可按比例算出二分音符、四分音符、八分音符的時長。不同樂曲節奏快慢不同,所以全音符並無標準時長,本例中全音符時長取為3s.

去除雜音

以上方法製作的音樂,由於相鄰音符間相位不連續而產生高頻分量,聽取時相鄰音符間會有「啪」的雜音。

利用包絡進行修正(這裡用了指數包絡),使不同音符連接處信號的幅度為零。修正後兩個相鄰音符的圖像如下

有了以上工作,最後一步便是將音樂曲譜一一對應成正弦波信號,並完成拼接。本文開頭的音頻是根據以下曲譜在Matlab中製作完成。

本篇攻略完,歡迎廣大讀者來信交流。

書籍推薦

《質化研究必備工具——NVivo10之圖解與應用》

作者:劉世閔

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 學術中國 的精彩文章:

博士後也是實習生?聊聊博士那些辛酸的事兒
當漫畫遇上未來簡史:你們這些愚蠢的人類

TAG:學術中國 |

您可能感興趣

Matlab對深度學習工具包DeepLearnToolbox的例子實現
我和Matlab(一)
windows7下配置caffe+matlab2016 無GPU
7天掌握數模常用演算法應用與Matlab編程
matlab的快捷方式與使用技巧
BP神經網路模型:Matlab
全面對比 MATLAB、Julia、Python,誰在科學計算中更勝一籌?
用matlab繪製指數衰減信號及其相關性質
數學建模演算法應用與Matlab編程
排序並記錄排序前的索引(類似matlab sort函數)
MATLAB-Python-Julia速查表
MathWorks 為 MATLAB 添加新的預測性維護產品
NVH-CAE工程師:掌握了MATLAB和Python,我還是離不開VBA
掌握MATLAB基礎,其實並不難!
MATLAB常用演算法與應用實例分享來襲!
MATLAB都能用來做什麼?
人生苦短,不如學學MATLAB
快速掌握MATLAB應用,從這一步開始
掌握MATLAB使用技巧,從這一步做起!
MATLAB演算法與框架資料分享來襲