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


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

    大抵流程:

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

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

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

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

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

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

    详细代码:

    1. function audioConversionGUI()
    2. % 创建图形界面
    3. fig = figure('Name', '声音采样率转换', 'Position', [200, 200, 400, 300]);
    4. % 创建按钮和文本框
    5. uicontrol(fig, 'Style', 'pushbutton', 'String', '选择音频文件', 'Position', [50, 230, 120, 30], 'Callback', @selectAudioFile);
    6. uicontrol(fig, 'Style', 'text', 'String', '当前采样率:', 'Position', [50, 180, 100, 20]);
    7. uicontrol(fig, 'Style', 'text', 'String', '目标采样率:', 'Position', [50, 130, 100, 20]);
    8. uicontrol(fig, 'Style', 'edit', 'Position', [160, 180, 100, 20], 'Tag', 'currentRate');
    9. uicontrol(fig, 'Style', 'edit', 'Position', [160, 130, 100, 20], 'Tag', 'targetRate');
    10. uicontrol(fig, 'Style', 'pushbutton', 'String', '采样率转换', 'Position', [50, 80, 120, 30], 'Callback', @convertSamplingRate);
    11. uicontrol(fig, 'Style', 'pushbutton', 'String', '播放音频', 'Position', [200, 80, 120, 30], 'Callback', @playAudio);
    12. % 选择音频文件回调函数
    13. function selectAudioFile(~, ~)
    14. [filename, pathname] = uigetfile({'*.wav;*.mp3'}, '选择音频文件');
    15. if filename ~= 0
    16. filepath = fullfile(pathname, filename);
    17. [audio, sampleRate] = audioread(filepath);
    18. % 更新当前采样率文本框
    19. currentRateTextBox = findobj(fig, 'Tag', 'currentRate');
    20. set(currentRateTextBox, 'String', num2str(sampleRate));
    21. % 保存音频数据和采样率
    22. setappdata(fig, 'audioData', audio);
    23. setappdata(fig, 'sampleRate', sampleRate);
    24. % 绘制音频波形
    25. plotAudioWaveform(audio, sampleRate);
    26. end
    27. end
    28. % 采样率转换回调函数
    29. function convertSamplingRate(~, ~)
    30. % 获取音频数据和采样率
    31. audio = getappdata(fig, 'audioData');
    32. sampleRate = getappdata(fig, 'sampleRate');
    33. % 获取目标采样率
    34. targetRateTextBox = findobj(fig, 'Tag', 'targetRate');
    35. targetRate = str2double(get(targetRateTextBox, 'String'));
    36. % 进行采样率转换
    37. convertedAudio = resample(audio, targetRate, sampleRate);
    38. % 更新音频数据和采样率
    39. setappdata(fig, 'audioData', convertedAudio);
    40. setappdata(fig, 'sampleRate', targetRate);
    41. % 绘制音频波形
    42. plotAudioWaveform(convertedAudio, targetRate);
    43. end
    44. % 播放音频回调函数
    45. function playAudio(~, ~)
    46. % 获取音频数据和采样率
    47. audio = getappdata(fig, 'audioData');
    48. sampleRate = getappdata(fig, 'sampleRate');
    49. % 播放音频
    50. soundsc(audio, sampleRate);
    51. end
    52. % 绘制音频波形
    53. function plotAudioWaveform(audio, sampleRate)
    54. axes('Parent', fig, 'Units', 'pixels', 'Position', [50, 20, 300, 50]);
    55. t = (0:length(audio)-1) / sampleRate;
    56. plot(t, audio);
    57. xlabel('时间 (秒)');
    58. ylabel('幅度');
    59. title('音频波形');
    60. end
    61. end

    运行结果:

  • 相关阅读:
    Spring 事务失效的八种场景
    如何本地搭建Plex私人影音云盘教程,实现Plex家庭影音中心,打造超级多媒体中心
    Web前端系列技术之JavaScript进阶(从ES6开始)①
    一个快速切换一个底层实现的思路分享
    leetcode刷题
    什么是混合元编程
    《Python 计算机视觉编程》学习笔记(四)
    ZCMU--1577: 食堂的蛋饼
    深度优先搜索(DFS)
    【英雄哥七月集训】第 19天:二叉树
  • 原文地址:https://blog.csdn.net/weixin_72926030/article/details/134404650