Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >关于音频播放器GUI的Matlab问题

关于音频播放器GUI的Matlab问题
EN

Stack Overflow用户
提问于 2015-10-01 22:04:31
回答 2查看 1.9K关注 0票数 1

我是很新的Matlab和我试图做一个程序,其中有3个按钮。

问题1:

按钮1将链接到音频文件(.wav),所以当我按下它时,按钮1将“选择”第一个音频文件。

按钮2将链接到另一个音频文件(.wav),所以当我按下它,按钮2将“选择”第二个音频文件。

然后,我需要按下按钮3来播放选定的声音文件,根据我首先按的按钮(按钮1/按钮2)。

我现在的代码是这样的:

按钮1和2:

代码语言:javascript
运行
AI代码解释
复制
[FileName,PathName] = uigetfile({'*.wav'},'Load Wav File');
[x,Fs] = wavread([PathName '/' FileName]);

按钮3:

代码语言:javascript
运行
AI代码解释
复制
player = audioplayer(x,Fs);
play(player);

好的,所以我的第一个问题是,当我运行这个代码时,我必须手动选择这个文件。我不太确定如何使它已经链接到文件,所以我需要帮助在这部分.

我的第二个问题其实是关于音频播放器..。对于Button 3来说,它实际上不起作用..。也不会播放任何声音。我以前尝试过sound (x,Fs),但是我在网上搜索,他们说我必须手动发出命令清晰的声音来阻止.wav文件的继续。

如何解决这个问题?因为我认为如果我在代码中使用第四个按钮:

代码语言:javascript
运行
AI代码解释
复制
stop(player)

这给了我一个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 00:43:40

我的第一个答案是开始变得有点混乱,所以我将在这里张贴一个完全工作的简单例子。在这个GUI中,有3个pushButtons (播放、暂停和停止)和一个.wav文件播放(piano2.wav)。

代码语言:javascript
运行
AI代码解释
复制
function varargout = AudioTest(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @AudioTest_OpeningFcn, ...
                   'gui_OutputFcn',  @AudioTest_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%      Opening function       %%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



function AudioTest_OpeningFcn(hObject, eventdata, handles, varargin)


handles.output = hObject;
handles.myPlayer=[];

% Update handles structure

guidata(hObject, handles);





function varargout = AudioTest_OutputFcn(hObject, eventdata, handles) 


varargout{1} = handles.output;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%  Executed on press of Play button   %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function Play_Callback(hObject, eventdata, handles)

[x,Fs]=wavread('piano2.wav');
handles.myPlayer=audioplayer(x,Fs);
play(handles.myPlayer);
guidata(hObject,handles);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%  Executed on press of Pause button   %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function Pause_Callback(hObject, eventdata, handles)


pause(handles.myPlayer);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%  Executed on press of Stop button   %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function Stop_Callback(hObject, eventdata, handles)

stop(handles.myPlayer);
票数 1
EN

Stack Overflow用户

发布于 2015-10-02 04:07:42

您必须知道,您在回调函数中定义的变量没有存储,这就是为什么Button 3不能工作的原因。

-Have您尝试直接运行一个音频文件来检查它在编写GUI之前是否有效?

关于您尝试做的事情的-Several技巧:

1)如果不想手动选择文件,只需设置:

文件名=“.wav文件的完整路径”;

2)要构造包含完整路径(如果有FileName和PathName )的字符串,可以这样做:

代码语言:javascript
运行
AI代码解释
复制
FullPath=strcat(PathName,FileName);

3)按钮1和按钮2是什么样的按钮?为什么你需要按钮,如果它只是选择一个文件。我建议:

  • 单选按钮:在这种情况下,它将更加直观,此外,您还可以在Button3_Callback中以编程方式获取它们的状态,以读取正确的.wav。
  • ListBox :如果您计划能够轻松地增加读取更多.wav文件的可能性,而不必更改GUI,则非常有用。

4)关于最后一个问题,也是因为变量不是在回调之间传递的,所以在Button4_Callback中,Matlab不知道变量'player‘。

当你回答我的问题^^时,我会发布更多的细节

编辑-关于您的评论:

( a)您不应该使用‘`function uipanel1_SelectionChangeFcn(hObject,eventdata,handles)'来调用您的代码,因为您只需单击Button3就可以完成所有操作。(函数Button3_Callback(hObject,eventdata,handles))

( b)我建议您为GUI元素提供自定义名称(在属性编辑器中更改标记属性),例如,Button3应该是“play”或类似的东西。(假设一个GUI有35个按钮,25个编辑字段等等,你很快就会迷路)

( c) Button3_Callback看起来应该是:

代码语言:javascript
运行
AI代码解释
复制
%Know which radiobutton is selected

Value_radiobutton1=get(handles.radiobutton1,'value'); %Returns 1 if radiobutton1 is checked, 0 if not

Value_radiobutton2=get(handles.radiobutton2,'value'); %Same as above but for radiobutton2

%Now that you have the information :

if(Value_radiobutton1)

% play first .wav

FullPath='C:\Users\Y400\Documents\MATLAB\test1';

[x,Fs]=wavread(FullPath);

handles.myPlayer = audioplayer(x,Fs);

play(handles.myPlayer);



else

% play second.wav

end

%store your handles again to keep track of your audioplayer.

guiData(hObject,handles);

注意,一旦回调停止执行,音频文件就会停止播放,所以您必须在那里使用一个小技巧,例如:thread/328757注意到,在执行回调后,您的player变量将被删除,因此您将无法再访问它。我建议您在handles对象中存储它的句柄。例如,可以在guidata(hObject,handles)之前在GUI的开头函数中这样做,方法是添加如下内容:

代码语言:javascript
运行
AI代码解释
复制
handles.myPlayer=[];

然后在您的Button3_Callback函数中重写它

而不是写:player=audioplayer[x,Fs]

你可以选择:handles.myPlayer=audioplayer[x,Fs]

然后,您可以访问它来暂停/停止音频。

现在你还得:

  • 想办法让音乐停止播放(按一下按钮?)同样的按钮来玩吗?)
  • 防止用户同时检查两个单选按钮。
  • 防止用户在没有检查无线电按钮的情况下按button3 (可以在选中无线电按钮之前禁用button3,或者默认情况下检查其中一个单选按钮)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32901413

复制
相关文章
ScintillaNET 需要帮助
Scintilla是一个免费的源代码编辑控件,它完全开放源代码,并且提供一个license允许用户自由地将它用在开源软件或是商业软件中。作为源代码编辑控件,我们能在普通的的文本编辑控件中能看到的功能,Scintilla都完全能够实现,而且,它还能够提供很多编辑和调试源代码时有用的特殊功能。包括语法高亮显示,错误指示,代码自动完成以及代码提示等。而且在左边的空白处(margin),可以显示调试代码中非常有用的显示断点以及显示当前运行行等功能。而且,自定义风格的功能比其他大部分编辑器控件都开放,它允许用户自定
张善友
2018/01/22
1.5K0
与数据挖掘有关或有帮助的R包和函数的集合
rpart,party,randomForest,rpartOrdinal,tree,marginTree,
IT阅读排行榜
2018/08/13
8530
有关JIT你需要知道的
JVM对代码执行的优化可分为运行时(runtime)优化和即时编译器(JIT)优化。 运行时优化主要是解释执行和动态编译通用的一些机制。比如说锁机制(如偏斜锁)、内存分配机制(如TLAB)等。除此之外,还有一些专门用于优化解释执行效率的,比如说模版解释器、内联缓存(inline cache,用于优化虚方法调用的动态绑定)
全菜工程师小辉
2019/08/16
1K0
Python和Java的语法对比,语法简
Python是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
py3study
2020/01/16
1.8K0
【学习】干货:与数据挖掘有关或有帮助的R包和函数的集合
与数据挖掘有关或者有帮助的R包和函数的集合。 1、聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pam, pamk, clara 基于层次的方法: hclust, pvclust, agnes, diana 基于模型的方法: mclust 基于密度的方法: dbscan 基于画图的方法: plotcluster, plot.hclust 基于验证的方法: cluster.stats 2、分类 常用的包: rpart,party,randomFo
小莹莹
2018/04/23
1.1K0
【学习】干货:与数据挖掘有关或有帮助的R包和函数的集合
对Python老司机99%有帮助的简明语法总结乱编
本文由马哥教育Python实战开发班6期学员推荐,转载自互联网,作者为赖笔小新,感谢作者的辛苦付出和贡献。 最近发现进入python群的朋友都在你是如何自学python语法的,每当被问到这个问题时,我内心是坦荡的,因为我不知道到底我接下来说的这些话会给看到的各位带来什么? 虽然大家已经对Python已经有了一个初步认识 了,但是我还不得不说关于Python语法的一些事,以便于我这个装逼的过程顺利的完成。 ————!!! 只针对有经验开发人员 ---- 简单输入输出 ---- 输出 print 10
小小科
2018/05/03
1.4K0
对Python老司机99%有帮助的简明语法总结乱编
java和python的语法的区别
2, 导包的时候直接用import java.util.math ,也就是直接里面import进行导包
一写代码就开心
2020/11/19
3620
Python有关datetime的例子
import datetimeb=input('请输入你的姓名:')a=eval(input('请输入你的出生年份:'))year=datetime.date.today().yearprint('你好!',b,'。','您',year-a,'岁')这是datetime的实例代码,可以直接拿去使用测试
常温阔乐
2022/11/18
5620
「R」R 基础语法与获取帮助
就像学习一门外语,如果你想要学好,必须掌握语义、语法:单词、连词、句子结构等等。学习一本编程语言也基本一样,我们如果想要高效地编程 R,必然要学好 R 的语言的语义和语法。
王诗翔呀
2020/07/06
5590
「R」R 基础语法与获取帮助
有关Python的分片操作
刚在论坛python版 http://bbs.byr.cn/#!article/Python/1693 解决了一个关于python分片的问题。
py3study
2020/01/07
8410
您需要了解的有关Selenium等待方法
等待可以帮助用户在重定向到其他网页时解决问题。这可以通过刷新整个网页并重新加载新的Web元素来实现。有时,也可能会有Ajax调用。因此,在重新加载网页并反映Web元素时可以看到时间滞后。
用户7466307
2020/06/24
1.8K0
查看python的模块和函数帮助文档方法
进入help帮助文档界面,根据屏幕提示可以继续键入相应关键词进行查询,继续键入modules可以列出当前所有安装的模块:
py3study
2020/01/13
3.4K0
Python的Xpath介绍和语法详解
XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历
Lansonli
2021/10/09
4.1K0
0基础入门学习Python开发用什么软件好?
俗话说:“工欲善其事,必先利其器”,对于初学者来说,想要学好Python,除了需要付出努力外,还需要一个顺手的兵器。一个好的IDE会帮助你方便地编写Python程序,使你的编程更加舒适。那么,对于刚入
python学习教程
2021/03/17
2.5K0
0基础入门学习Python开发用什么软件好?
python和Java语法对比
Python定义变量的时候不需要给出类型,直接定义即可,Python会自动判断变量类型。 String类型:
全栈程序员站长
2022/09/08
5280
python的基本命名和语法
2.大驼峰式命名法 每个单词的首字母都使用大写字母 例如:BaiDuOcr、HandleTask
不止于python
2022/05/31
4270
有关operator的precedence和associativity
2. 表达式的计算就是对这些运算符的计算(运算符的计算对象就是其操作码),所有计算的结果作为该表达式的结果
KINGYT
2023/03/15
3500
有关operator的precedence和associativity
你需要了解的Markdown语法
在我们学习编程的日常中,我们常常需要记录一些东西,比如:知识点笔记、算法的思路算法题的题解,这是十分重要的,因此一款很好的记笔记的语法就出现了,那就是markdown,markdown是一种简洁的、快速的语法形式,有了markdown就能极大地帮助我们享受于算法思路,不必纠结于整体的排版布局。 以下是关于markdown的语法,其实并不难,只要多练几次,就能很轻松的写出markdown。
用户9996207
2023/01/13
4010
Python函数return的用法和作用、以及帮助函数
前面的函数学习之后我们发现,函数不被调用是不会直接执行的。我们在之前的函数调用之后发现运行的结果都是函数体内print()打印出来的结果,但是有时候为了方便函数参与二次运算,我们让函数体内不输出任何结果,而是把函数本身就当做一种结果,输出这种结果的方式就可以理解为返回函数的结果,python用return关键词来返回。下面我们对比几种不同的函数调用结果。
python自学网
2021/12/05
9.4K0
Python函数return的用法和作用、以及帮助函数
Python|有关坐标题的解析
平面上有n个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。
算法与编程之美
2020/02/21
8270
Python|有关坐标题的解析

相似问题

iphone没有播放通知声音

10

如何在Android中循环播放没有间隙的声音?

40

在没有资源的iPhone上播放声音

10

Iphone SDK:播放“系统声音”

10

iPhone Datepicker播放“滴答”声音

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档