使用matlab制作声音采样率转换、播放以及显示的界面

利用matlab做一个声音采样率转换、播放以及显示的界面

大抵流程:

  1. 图形界面创建 :使用figure函数创建名为"声音采样率转换"的图形界面,并设置了其位置和大小。

  2. 按钮和文本框 :使用uicontrol函数创建了选择音频文件的按钮、显示当前采样率和目标采样率的文本标签以及用于输入当前采样率和目标采样率的编辑文本框,还有进行采样率转换和播放音频的按钮。

  3. 回调函数:定义了选择音频文件、采样率转换和播放音频等按钮点击后的回调函数。这些回调函数负责实际的操作,比如读取音频文件、进行采样率转换和播放音频。

  4. 音频处理 :使用audioread函数读取音频文件,resample函数进行采样率转换,soundsc函数播放音频。

  5. 绘制波形 :定义了用于绘制音频波形的函数plotAudioWaveform,其中使用axes函数创建坐标系,并使用plot函数绘制音频波形图。

  6. 数据传递 :使用setappdatagetappdata函数在各个回调函数之间传递音频数据和采样率信息。

详细代码:

Matlab 复制代码
function audioConversionGUI()
    % 创建图形界面
    fig = figure('Name', '声音采样率转换', 'Position', [200, 200, 400, 300]);
    
    % 创建按钮和文本框
    uicontrol(fig, 'Style', 'pushbutton', 'String', '选择音频文件', 'Position', [50, 230, 120, 30], 'Callback', @selectAudioFile);
    uicontrol(fig, 'Style', 'text', 'String', '当前采样率:', 'Position', [50, 180, 100, 20]);
    uicontrol(fig, 'Style', 'text', 'String', '目标采样率:', 'Position', [50, 130, 100, 20]);
    uicontrol(fig, 'Style', 'edit', 'Position', [160, 180, 100, 20], 'Tag', 'currentRate');
    uicontrol(fig, 'Style', 'edit', 'Position', [160, 130, 100, 20], 'Tag', 'targetRate');
    uicontrol(fig, 'Style', 'pushbutton', 'String', '采样率转换', 'Position', [50, 80, 120, 30], 'Callback', @convertSamplingRate);
    uicontrol(fig, 'Style', 'pushbutton', 'String', '播放音频', 'Position', [200, 80, 120, 30], 'Callback', @playAudio);
    
    % 选择音频文件回调函数
    function selectAudioFile(~, ~)
        [filename, pathname] = uigetfile({'*.wav;*.mp3'}, '选择音频文件');
        if filename ~= 0
            filepath = fullfile(pathname, filename);
            [audio, sampleRate] = audioread(filepath);
            
            % 更新当前采样率文本框
            currentRateTextBox = findobj(fig, 'Tag', 'currentRate');
            set(currentRateTextBox, 'String', num2str(sampleRate));
            
            % 保存音频数据和采样率
            setappdata(fig, 'audioData', audio);
            setappdata(fig, 'sampleRate', sampleRate);
            
            % 绘制音频波形
            plotAudioWaveform(audio, sampleRate);
        end
    end

    % 采样率转换回调函数
    function convertSamplingRate(~, ~)
        % 获取音频数据和采样率
        audio = getappdata(fig, 'audioData');
        sampleRate = getappdata(fig, 'sampleRate');
        
        % 获取目标采样率
        targetRateTextBox = findobj(fig, 'Tag', 'targetRate');
        targetRate = str2double(get(targetRateTextBox, 'String'));
        
        % 进行采样率转换
        convertedAudio = resample(audio, targetRate, sampleRate);
        
        % 更新音频数据和采样率
        setappdata(fig, 'audioData', convertedAudio);
        setappdata(fig, 'sampleRate', targetRate);
        
        % 绘制音频波形
        plotAudioWaveform(convertedAudio, targetRate);
    end

    % 播放音频回调函数
    function playAudio(~, ~)
        % 获取音频数据和采样率
        audio = getappdata(fig, 'audioData');
        sampleRate = getappdata(fig, 'sampleRate');
        
        % 播放音频
        soundsc(audio, sampleRate);
    end

    % 绘制音频波形
    function plotAudioWaveform(audio, sampleRate)
        axes('Parent', fig, 'Units', 'pixels', 'Position', [50, 20, 300, 50]);
        t = (0:length(audio)-1) / sampleRate;
        plot(t, audio);
        xlabel('时间 (秒)');
        ylabel('幅度');
        title('音频波形');
    end
end

运行结果:

相关推荐
莫陌尛.11 分钟前
Java核心知识点:直接内存、CPU密集型线程池、并行流对比文档
java·开发语言
西峰u17 分钟前
Java多线程初阶完整总结|线程、锁、volatile、等待通知、常见案例
java·开发语言·jvm
夜雨声烦丿36 分钟前
从需求到页面:日期计算器应用的 ArkTS 原生实现
开发语言·javascript·华为·harmonyos
程序员雪球1 小时前
本地IDEA打断点debug容器
java·开发语言
老白干1 小时前
基于枚举 + 注解的 Java 数据脱敏实践(fastjson 序列化场景)
java·开发语言
半亩码田1 小时前
C#转Python第4.1篇:当 try-catch 遇上 try-except:异常处理的大不同
开发语言·python·c#
数据知道1 小时前
Java 安全审计实战:SSRF、反序列化、SpEL 注入
java·开发语言·安全·网络安全
陈年老古董1 小时前
矿物分类数据处理:缺失值填充方法详解
开发语言·python·机器学习·项目
whcyhhh2 小时前
头歌实践教学平台:数据科学与大数据技术导论(十八4)
大数据·开发语言·python
z落落2 小时前
C# Modbus-RTU 串口读写设备+CRC16+邮件告警
开发语言·c#