- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建一个带有播放和停止按钮的简单图形用户界面,以便在 python 中播放 mp3 文件。我使用包含 2 个按钮(停止和播放)的 Tkinter 创建了一个非常简单的图形用户界面。
我创建了一个执行以下操作的函数:
def playsound () :
sound = pyglet.media.load('music.mp3')
sound.play()
pyglet.app.run()
我将该函数添加为按钮播放的命令。我还做了一个不同的功能来停止音乐:
def stopsound ():
pyglet.app.exit
我将此功能作为命令添加到第二个按钮。但问题是,当我点击播放时,python 和 gui 卡住了。我可以尝试关闭窗口但它没有关闭,并且停止按钮没有响应。我知道这是因为 pyglet.app.run() 一直执行到歌曲结束,但我该如何防止这种情况呢?当我点击按钮时,我希望 gui 停止播放音乐。关于在哪里可以找到解决方案的任何想法?
最佳答案
您将两个 UI 库混合在一起 - 这本质上并没有什么坏处,但存在一些问题。值得注意的是,他们都需要一个自己的主循环来处理他们的事件。 TKinter 使用它来与桌面和用户生成的事件通信,在这种情况下,pyglet 使用它来播放您的音乐。
这些循环中的每一个都阻止了正常的“自上而下”程序流,正如我们在学习非 GUI 编程时所习惯的那样,程序应该基本上从主循环回调。在这种情况下,在 Tkinter 回调的中间,您启动了 pyglet 主循环(调用 pyglet.app.run
),并且控件永远不会返回到 Tkinter 库。
有时,不同库的循环可以在同一进程中共存,不会发生冲突——当然,您要么运行其中一个,要么运行另一个。如果是这样,则可以在不同的 Python 线程中运行每个库的主循环。
如果它们不能一起存在,你将不得不在不同的进程中处理每个库。
因此,让音乐播放器在另一个线程中启动的一种方法可能是:
from threading import Thread
def real_playsound () :
sound = pyglet.media.load('music.mp3')
sound.play()
pyglet.app.run()
def playsound():
global player_thread
player_thread = Thread(target=real_playsound)
player_thread.start()
如果 Tkinter 和 pyglet 可以共存,那应该足以让您的音乐开始。但是,为了能够控制它,您需要执行更多操作。我的建议是在 pyglet 线程上有一个回调,由 pyglet 大约每秒调用一次——这个回调检查一些全局变量的状态,并根据它们选择停止音乐、更改正在播放的文件等等上。
关于python - 在 Python 中使用 Pyglet 和 Tkinter 播放音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283067/
启动Android游戏时,我试图让一些音乐淡出。音乐在主菜单中播放,然后在播放器单击播放时淡出。我可以停止播放音乐,只是不会消失。 我试图用这个淡出: using UnityEngine; using
我正在 XNA 中创建一个游戏,它可以使用大量的音乐循环,但我似乎无法同步这些声音。 我总是错过几毫秒你能帮我吗? 这是我第一次尝试同步声音。请注意,我需要处理数十种声音...... 这个同步问题可能
我使用以下代码播放了一首歌,但它有 11 分钟长,我该如何停止它? 此代码位于 jFrame 1 中。如何使其停止在 jFrame 2 中? Input
在阅读我的书并浏览一些 YouTube 教程后,我对标准化的理解是,重要的事情之一就是不要有重复的值。更具体地说,主键 (ID) 不应重复。 因此,如果我正在使用音乐/音乐会数据库中的某些表,那么以下
我正在用 java 创建一个应用程序/游戏,其中包含背景音乐/声音。一切都按预期工作。如果播放某些系统声音/媒体声音/其他声音,我想静音/停止。 有什么建议...?? 最佳答案 我建议不要关心这个问题
只是尝试从图像 (1080p .png) + 音乐 (320Kb mp3) 为 youtube 制作视频。 ffmpeg -loop 1 -i image.png -i music.mp3 -
我正在GW-Basic中开发游戏,我想向其中添加音乐,但问题是我无法在后台播放,但是当我添加声音时先播放声音,然后在开始执行游戏和vICE之后vERSA。而我希望这两件事同时播放..所以知道怎么做吗?
我正在使用Xcode的Sprite套件开发iPhone游戏,想知道是否有一种简单或最佳实践的方法可以通过编程方式消除所有声音效果/音乐?对我来说,最明显的方法是创建一些 bool(boolean) 变
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我正在设计一个 Android 应用程序,需要依次播放各种短音乐文件。 我设置了一个“onClick”监听器来运行一个循环,一遍又一遍地播放这些声音文件,它们可能会播放 100 多次。 但是 我需要用
我有一个网站,其中包含集成到布局中的 Flash 音乐播放器。我希望用户能够在不中断音乐的情况下浏览网站。我做了很多研究和思考,以下是我提出的选项(请记住,我希望尽可能对 SEO 友好)。有人有其他想
我可以即时生成一些音调并播放声音吗?例如,如果我想生成 DO RI MI FA SO LA XI 音调并播放它们? 似乎声音 API 都是为了播放现有的音频文件。谢谢! 最佳答案 参见 Matt Ga
我一直在尝试将音乐添加到我的应用程序中,但没有特别成功。我一直在尝试使用 AVFoundation,我的代码如下: //MUSIC var audioPlayer = AVAudioP
MPMediaPickerController 返回一个 MPMediaItem 如果返回本地 url,则可以播放声音。 如果音乐没有下载到本地,则assetURL为空。 如何在本地下载 MPMedi
有什么方法可以检测是否正在播放 iPod 应用以外的其他来源的音乐或媒体? 我知道我可以检测到从 ipod 播放的音乐: [[MPMusicPlayerController iPodMusicPlay
我刚刚安装了 music21,我正在尝试开始使用它。我安装了 Musescore3,但我无法使 show() 函数工作。 我试过按照我在网上找到的一些说明更改路径,但无济于事 from music21
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我目前正在寻找某种方式来扩展SFML.Net以使用MP3。因此,ioctllr推荐了NLayer,我想尝试一下。这是我的方法: namespace AudioCuesheetEditor.AudioB
我包含了正确的库和所有内容,这部分代码由于某种原因给出了段错误: int numerator = atoi(&fraction[0]); int denominator = atoi(&fracti
是否可以播放 AVPLayer 实例(带有视频)并同时使用 MPMusicPlayerController 实例来播放 iTunes 播放列表? 我尝试了几种解决方案,但每次播放视频时音频都会停止,每
我是一名优秀的程序员,十分优秀!