在matlab中用gui设计一个电子钢琴,并写出用了什么控件及其功能
时间: 2024-03-18 18:39:21 浏览: 111
基于matlab的gui设计
以下是一个 MATLAB GUI 设计代码的示例,用于模拟电子钢琴。该 GUI 使用了以下控件:
1. `uicontrol('Style', 'pushbutton')`:用于选择不同的音符。
2. `uicontrol('Style', 'slider')`:用于调整音量大小。
3. `uicontrol('Style', 'axes')`:用于显示当前按下的键位。
```matlab
function electronic_piano()
% 创建 GUI 窗口
fig = figure('Position', [300, 300, 500, 400], 'MenuBar', 'none', 'ToolBar', 'none', 'NumberTitle', 'off', 'Name', '电子钢琴');
% 创建 UI 组件
btn1 = uicontrol('Style', 'pushbutton', 'Position', [20, 350, 40, 40], 'String', 'C', 'Callback', @play_note);
btn2 = uicontrol('Style', 'pushbutton', 'Position', [70, 350, 40, 40], 'String', 'D', 'Callback', @play_note);
btn3 = uicontrol('Style', 'pushbutton', 'Position', [120, 350, 40, 40], 'String', 'E', 'Callback', @play_note);
btn4 = uicontrol('Style', 'pushbutton', 'Position', [170, 350, 40, 40], 'String', 'F', 'Callback', @play_note);
btn5 = uicontrol('Style', 'pushbutton', 'Position', [220, 350, 40, 40], 'String', 'G', 'Callback', @play_note);
btn6 = uicontrol('Style', 'pushbutton', 'Position', [270, 350, 40, 40], 'String', 'A', 'Callback', @play_note);
btn7 = uicontrol('Style', 'pushbutton', 'Position', [320, 350, 40, 40], 'String', 'B', 'Callback', @play_note);
btn8 = uicontrol('Style', 'pushbutton', 'Position', [370, 350, 40, 40], 'String', 'C', 'Callback', @play_note);
slider = uicontrol('Style', 'slider', 'Position', [20, 300, 400, 20], 'Min', 0, 'Max', 1, 'Value', 0.5, 'Callback', @change_volume);
ax = uicontrol('Style', 'axes', 'Position', [20, 100, 400, 150]);
% 创建音符
notes = containers.Map({'C', 'D', 'E', 'F', 'G', 'A', 'B'}, {262, 294, 330, 349, 392, 440, 494});
% 创建音频播放器
player = audioplayer(zeros(44100, 2), 44100);
% 定义按钮的回调函数
function play_note(hObject, eventdata)
note = get(hObject, 'String');
freq = notes(note);
volume = get(slider, 'Value');
duration = 0.5;
t = linspace(0, duration, round(duration * 44100));
y = volume * sin(2 * pi * freq * t)';
sound(y, 44100);
plot_note(note);
end
% 定义滑块的回调函数
function change_volume(hObject, eventdata)
volume = get(hObject, 'Value');
setappdata(fig, 'volume', volume);
end
% 显示当前按下的键位
function plot_note(note)
cla(ax);
axes(ax);
text(0.5, 0.5, note, 'FontSize', 40, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle');
end
end
```
该 GUI 的基本思路是:首先使用多个按钮表示不同的音符,当用户按下按钮时,GUI 会根据按钮的名称确定音符的频率,并使用 `sound` 函数播放音符。用户可以使用滑块调整音量大小,当用户调整音量时,GUI 会重新计算音符的音量并重新播放音符。同时,GUI 会在一个图像中显示当前按下的键位。
阅读全文