Python3使用PySynth制作音樂的方法
本人雖然五音不全,但是聽歌還是很喜歡的。希望能利用機(jī)器自動(dòng)制作音樂,本我發(fā)現(xiàn)了一個(gè)比較適合入門的有趣的開源音樂生成模塊 PySynth ,文我們主要講解下如何Python3使用PySynth制作音樂。
樂理
- 聲音:物體振動(dòng)產(chǎn)生,振動(dòng)次數(shù)越多,音越高;振動(dòng)次數(shù)越少,音越低
- 可聞:人耳可以聽到的聲音在每秒16-2000此左右 樂音:振動(dòng)規(guī)則產(chǎn)生,聽起來高低明顯
- 噪音:振動(dòng)不規(guī)則產(chǎn)生,聽起來高低不明顯
- 音樂:將聲音通過藝術(shù)形象表達(dá)人們的思想感情
- 音階:do、re、mi、sol、la、(do)
- 調(diào)性:C、D、E、F、G、A、B
安裝
pip3 install pysynth
示例
import pysynth # 例1:C大調(diào) song1 = [ ['c',4],['d',4],['e',4],['f',4],['g',4],['a',4],['b',4],['c5',2],['r',1], ['c3',4],['d3',4],['e3',4],['f3',4],['g3',4],['a3',4],['b3',4],['c4',2],['r',1], ['c1*', 1], ['c2*', 1], ['c3*', 1], ['c4*', 1], ['c5*', 1], ['c6*', 1], ['c7*', 1], ['c8*', 1], ] pysynth.make_wav(song1, fn = "linuxidc.com.wav")
在當(dāng)前目錄下生成linuxidc.com.wav文件。
在Linux終端輸入以下命令試聽一下
[linuxidc@localhost www.linuxidc.com]$ aplay -D plughw:0,0 linuxidc.com.wav
試下周杰倫的晴天,bmp是67下每分鐘:
import pysynth songx=(('e3',8),('d3',8),('f3',8),('e3',4),('c3',8),('g3',8),('b3',8),('c4',8),('b3',8),('c3',8),('c3',4),('c3',8),('a3',8),('a3',8), ('r',16),('a3',16),('g3',8),('g3',4),('g3',8),('f3',8),('e3',8),('d3',8),('e3',8),('f3',8),('e3',2.25),('e3',8),('f#3',8),('g#3',8), ('e3',4),('f3',8),('g3',8),('b3',8),('d4',8),('b3',8),('c4',8),('c4',6),('c4',16),('c4',8),('g3',8),('g3',8),('a3',8),('g3',8),('f3',8), ('a2',8),('b2',8),('c3',8),('d3',8),('e3',8),('d3',3),('e3',8),('c3',2)) pysynth.make_wav(songx, bpm=67, repeat=0, fn="linuxidc.wav")
隨機(jī)生成中國風(fēng)音樂旋律
import pysynth import numpy as np import re #先限定音符12356 中國風(fēng)五聲調(diào)式 這樣聽起來比較自然 notes=np.array(["c4","d4","e4","g4","a4",]) #音符時(shí)值 durations=np.array([1,2,4,-2,-4,-8]) #隨機(jī)生成音符 重音穿插其中 sn=[] for t in range(16): n=np.random.randint(0,len(notes)) note=notes[n]+"*" sn.append(note) for i in range(np.random.randint(3,5)): note0=notes[np.random.randint(0,len(notes))] sn.append(note0) #隨機(jī)生成音符時(shí)值序列 形成長短參差變幻的節(jié)奏 dn=[] for i in range(len(sn)): duration=durations[np.random.randint(0,len(durations))] nn=sn[i] dn.append(duration) #將音符和時(shí)值合并成旋律 melody=tuple(zip(sn,dn)) print(melody) #將樂譜合成到聲音文件 pysynth.make_wav(melody,fn =r"linuxmi.com.wav") print("ok")
備注:
'song' 是一個(gè)被定義的列表或元組,格式是這樣 ['音', 長度]
音符是'a','g'這些; 升半音以 '#' 表示,降半音以 'b' 表示;以octave 結(jié)束 (默認(rèn)為四分音符);asterisk 在最后代表重音; 'r' 是空.
音的長度用數(shù)字表示:1=全音符; 2=二分音符; 4=四分音符, 等.
浮點(diǎn)音符寫法:
1.33 = -2 = 二分浮點(diǎn)音符
2.66 = -4 = 四分浮點(diǎn)音符
5.33 = -8 = 八分浮點(diǎn)音符
一些參數(shù):
節(jié)奏:每分鐘節(jié)拍數(shù); bpm = 95
八度轉(zhuǎn)變 (neg. 降八度; pos. 升八度); transpose = 0
音符間停頓 (0. = 連音 ; 0.5 = 斷音); pause = 0.05
Volume boost:音量變高 (1. = 音量無變化); boost = 1.2
Output file name 輸出文件名;fn = 'pysynth_output.wav'
其他參數(shù):
Influences the decay of harmonics over frequency. Lowering the value eliminates even more harmonics at high frequencies.
Suggested range: between 3. and 5., depending on the frequency response of speakers/headphones used
harm_max = 4.
總結(jié)
以上所述是小編給大家介紹的Python3使用PySynth制作音樂的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
40行Python代碼實(shí)現(xiàn)天氣預(yù)報(bào)和每日雞湯推送功能
這篇文章主要介紹了通過40行Python代碼實(shí)現(xiàn)天氣預(yù)報(bào)和每日雞湯推送功能,代碼簡單易懂,非常不錯(cuò)具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-02-02python文本數(shù)據(jù)處理學(xué)習(xí)筆記詳解
這篇文章主要為大家詳細(xì)介紹了python文本數(shù)據(jù)處理學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06使用pandas的DataFrame的plot方法繪制圖像的實(shí)例
今天小編就為大家分享一篇使用pandas的DataFrame的plot方法繪制圖像的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python 數(shù)據(jù)可視化之Seaborn詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化庫seaborn的使用總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2021-11-11Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器
在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06Python高級(jí)property屬性用法實(shí)例分析
這篇文章主要介紹了Python高級(jí)property屬性用法,結(jié)合實(shí)例形式分析了Python property屬性的功能及各種常見的使用技巧,需要的朋友可以參考下2019-11-11基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法
今天小編就為大家分享一篇基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python?pyinstaller打包exe最新完整圖文教程
pyinstaller是一個(gè)非常簡單的打包python的py文件的庫,下面這篇文章主要給大家介紹了關(guān)于Python?pyinstaller打包exe的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Pycharm中import torch報(bào)錯(cuò)的快速解決方法
這篇文章主要介紹了Pycharm中import torch報(bào)錯(cuò)的快速解決方法,很多朋友容易碰到這個(gè)問題,今天小編特此把解決方案分享到腳本之家平臺(tái)供大家參考,需要的朋友可以參考下2020-03-03