用MATLAB设计一个超简单的变声GUI界面

2 篇文章 0 订阅
1 篇文章 0 订阅

由于并非专业变声制作,所以原理上只是进行了对时间轴的压缩或拉伸(浅层的频率变换)和振幅的变化,没有对音频文件进行滤波啊什么的深入处理。只适合娱乐而已。(哈哈~~~)


实现效果
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
每种声音变换对应一张图片。


实现原理:将音频看作一个二维轴,x轴代表播放的时间,y轴代表振幅;通过函数audioread()读取wav文件的数据长度和频率,利用数据长度比上频率就是时间长度;
[x,FS]=audioread(pathall); %pathall代表wav文件路径
t=(0:length(x)-1)/FS;

通过调节时间t的长短来变换频率FS;
eg:

    x3=x*2;%低沉~闷,交响乐
    t3=t*1.5;
    FS3=(0:length(x)-1)/t3;

1. GUIc操作界面的设计
a.新建>图形用户界面>选择默认的(default)
eg:新建gui
这里写图片描述
选择一个‘轴’调整合适的大小用来播放变声种类的图片;拽如4个按钮,并给每个控件设置名称和显示的文字,以及文字大小,当然还可设计背景颜色;(见附图黄色标记项)保存gui界面。
这里写图片描述

2. 程序的设计
在打开音频的按钮控件函数下添加如下代码,打开文件夹并获得文件路径;

    [FileName,PathName] = uigetfile('*.wav');
    pathall=strcat(PathName,FileName);

然后对wav文件进行读取:

    [x,FS]=audioread(pathall);
    t=(0:length(x)-1)/FS;

当然程序需要定义两个全局变量x,t,因为后面变声程序需要调用这两个数据;所以得在上面程序前加上:

global  x t;

所以导入音频按钮代码整体如下:

% --- Executes on button press in load_wav.
function load_wav_Callback(hObject, eventdata, handles)
% hObject    handle to load_wav (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
    global  x t;
    [FileName,PathName] = uigetfile('*.wav');
    pathall=strcat(PathName,FileName);%获得wav路径

    [x,FS]=audioread(pathall);%读取wav文件的数据和频率
    t=(0:length(x)-1)/FS;%变换得到播放时间

在变声处理的对应按钮下面进行x,t的处理以及加入图片显示和播放处理后的音频数据;(以大叔的为例)其他变声同样,只需改变显示的图片和变换t,x就可以了;

function uncle_wav_Callback(hObject, eventdata, handles)
% hObject    handle to uncle_wav (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
    global x t;
    a=imread('C:\Users\Administrator\Desktop\zzz\dashu.JPG');%读取图片
    axes(handles.axes1);
    imshow(a);%显示图片
    %wav处理
    x3=x*2;%低沉~闷
    t3=t*1.5;
    FS3=(0:length(x)-1)/t3;
    sound(x3,FS3);%播放处理后的音频数据

代码:代码浏览

  • 17
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值