基于MATLAB的音乐分析与合成演示程序的设计

2021-02-21 08:19毛艺晓王志鹏
科技风 2021年4期

毛艺晓 王志鹏

摘 要:利用MATLAB GUI平台,设计了一个音乐分析与合成综合演示系统。用户通过简单的鼠标点击操作,就可以实现音乐载入、波形显示、频域分析、音乐合成以及音频播放等一系列功能。该演示系统可以让用户更直观地理解音乐信号分析与合成的基本原理,激发对音频信号分析和处理的兴趣。

关键词:MATLAB;音乐分析与合成;傅里叶变换

Abstract:Using Matlab GUI platform,a music analysis and synthesis integrated demonstration system is designed.Through simple mouse click operation,users can achieve a series of functions such as music loading,waveform display,frequency domain analysis,music synthesis and audio playback.The demo system can make users understand the basic principle of music signal analysis and synthesis more intuitively and stimulate their interest in audio signal analysis and processing.

Key words:MATLAB;music analysis and synthesis;Fourier transform

1 緒论

MATLAB是是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,在信号处理领域已得到广泛的应用[1]。MATLAB还可以快速生成GUI(图形用户界面)程序。图形用户界面程序由一系列按钮、菜单、列表框、滑动条和文本框等控件组成,用户只需要通过鼠标和键盘操作,就可以实现各种运算,实现相应功能,具有形象生动、方便灵活的特点,是现代软件普遍采用的一种交互方式。MATLAB是一个数据分析和处理功能十分强大的工程实用软件,故运用它来进行音乐信号的采集、分析和处理相当便捷。

2 乐理知识介绍

将调式中的音,从以主音开始到以主音结束,由低到高(叫做上行),或者由高到低(叫做下行)以阶梯状排列起来,就叫做音阶。基本音阶为C调大音阶,也有D调、F调等。不同的音阶有不同的声音频率,而不同的声音频率也对应着不同的信号波形。利用软件模拟,可以用不同的频率代表不同的音阶,从而起到调节音调的作用,进而可以用数学方法模拟出原唱的效果[2]。由于不同的乐器其信号包络信号也不同,故在音乐合成研究中,常用少量的直线来近似表示复杂的包络形状。于是,乐音信号的波形包络就呈折线分布。同时,为了保证在两个乐音的邻接处信号幅度为零,也经常采用指数衰减的信号包络来表示。如果连接的音符产生了一个杂音,可以通过加包络来消噪音[3]。

3 音乐分析与合成演示平台的设计

3.1 主界面

在音乐分析与合成演示平台的设计中,每个模块的GUI程序设计都包含两个部分内容:GUI界面设计和m文件设计。GUI界面设计可以利用MATLAB提供的可视化GUIDE工具通过添加各种控件来完成;而m文件设计则主要根据界面设计,通过编写回调函数来实现相应的功能,音乐信号处理的功能均需在控件的回调函数中实现[4]。该音乐分析与合成演示系统的主界面如图1所示。主界面包含音乐信号分析和音乐信号合成两个子模块,分别点击对应的按钮就可以打开对应的子模块操作界面。

3.2 音乐信号分析子模块

该子模块的具有以下功能:

(1)载入音频文件。用户点击载入音频按钮后,可载入计算机中的任意音频文件(.wav等)。载入完毕后,上方的坐标轴内将生成对应的时域波形。

(2)音频的播放。载入音频后,点击播放音乐按钮,可播放当前载入的音频文件内容。

(3)生成分析图像。完成(1)步骤后,在第一个弹出式菜单中选择一种分析种类(频谱分析/功率谱分析/倒谱分析)后,点击生成图像按钮,将会在右方的坐标轴内生成对应的图谱,如图2所示。

(4)保存图像。用户在第二个弹出式菜单中选择一种保存图像类型(时域波形保存/频谱保存/功率谱保存/倒谱保存)后,点击保存图像按钮,将会弹出该类型图像的保存操作窗口(选择保存位置),进行保存。

该音乐信号分析子模块可以分别实现频谱分析、倒谱分析以及功率谱分析等功能[5]。

3.3 音乐信号合成子模块

音乐信号合成子模块如图3所示。该模块可以用两种方法实现音乐信号的合成:(1)方法1(载入曲谱):在弹出式菜单中选择一种歌曲片段(东方红/雪绒花/小步舞曲)后,点击合成音频信号按钮,将会在坐标轴中生成该歌曲的时域波形,点击播放音乐按钮后,将会播放当前选择的歌曲片段。选择输入中下拉菜单的第二个曲目《雪绒花》。通过部分歌曲音阶可知对应的频率为:392 261.63 293.66 329.63 349.23 392 261.63 261.63 440 349.23 392 440 493.88 523.25 261.63 261.63 349.23 392 349.23 329.63 293.66 329.63 349.23 329.63 293.66 261.63 293.66 329.63 293.66 261.63 246.94 261.63。每小节有两拍,一拍的时间是0.5s,因此各音节的持续时间分别为:0.5、0.25、0.25、1、0.5、0.25、0.25、1。在MATLAB中用一个行向量来存储这段音乐对应的抽样点,再用sound函数播放音乐即可[6]。《雪绒花》的合成效果图如图3所示。

(2)方法2(琴键输入):通过按下琴键来输入音频信号,输入完毕后,点击播放按钮,将会按照顺序合成所有按下琴键的音频信号并生成对应的时域波形,同时播放合成的音频信号,点击重新输入按钮,之前输入的音频信号将被清除,可以重头开始输入。每个琴键都有对应的频率,因此可以通过GUI上的按键及MATLAB的相关函数实现琴键输入的效果。按下前三个白色琴键的输出效果图如图4所示。

4 结语

本文在MATLAB 2017 for windows 10的环境下,建立了一个音乐信号分析与合成演示程序。它以图形窗口为主窗口,加入了下拉菜单、控制按钮、坐标轴等模块,实现了音乐信号的采集、播放、处理,以及信号功率谱、频谱、倒谱图的分析和图形显示。另外,通过按钮可在MATLAB图形窗口上实现音乐信号的输入与合成,收到的效果清晰直观。

参考文献:

[1]宋晓婷.利用MATLAB合成音乐的函数模拟实现与比对[J].太原师范学院学报:自然科学版,2018,17(1):27-32.

[2]張林,王艳芬,张晓光,等.基于MatlabGUI的数字信号处理演示平台设计[J].实验技术与管理,2016,243(12):154-157.

[3]连丽红.基于Matlab的信号与系统实验平台开发[J].实验技术与管理,2016(6):150-153.

[4]罗湘娟,陈丽,谢超.基于MATLAB的音乐分析与合成研究[J].科技经济导刊,2017(15):32.

[5]金波.基于Matlab的“信号与系统”实验演示系统[J].实验技术与管理,2011,27(12):104-107.

[6]闫红梅,吴冬梅,吴延海.Matlab在周期信号分解及频谱中的应用[J].实验技术与管理,2016(5):37-39,43.

基金项目:南阳师范学院教学研究项目(2019-JXYJYB-65,2017-JXYJYB-20);南阳师范学院课堂教学模式改革项目(2019-JXYJKT-26);南阳师范学院大学生实践教学活动创新项目(SPCP2020427)

作者简介:毛艺晓(1999— ),女,浙江舟山人,本科,主要研究方向:计算机技术应用。

通讯作者:王志鹏(1982— ),男,河南南阳人,副教授,主要研究方向:光学信息处理。