开发者网络

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 74|回复: 0

我用ChatGPT开发一款基于Python的mp3播放器

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-3-6 02:19:42 | 显示全部楼层 |阅读模式
在编写了点名器之后,我意犹未尽,开始尝试让ChatGPT参与复杂的编程,进一步检验一下它的编程能力。所以,我又让它为我编写了一款mp3播放器,以下是我的开发过程记录。
一、软件功能

点击open打开选中mp3文件可以播放,也可以通过pause(暂停)、stop(终止)mp3的播放。拖动上面的音量控制条可以增大或减少音量的大小,还可以实现拖动式快进、快退。



mp3播放器

二、编写过程

ChatGPT的软件开发能力是非常强的,之前我用ChatGPT探索了教学软件的开发,详见下面的链接:
之前的软件是点名器,功能相对单一,实现起来并不复杂,调试过程中没有发现大的报错。后期,我只是对显示的字体和按钮的caption进行了修改。
1. 初频尝试

下面我在让它编写音频播放器时,遇到了小麻烦。
首先,我详细输入了我要实现功能的具体描述,如下:



音乐播放器

然后,我copy code,放在thonny中进行调试,发现以下问题:



报错情况

一方面是这个按纽排列与我的要求相去甚远,我要的是横排,它给的是竖排,另一方面就是我拖动播放进度时报错。pygame.mixer_music has not attribute 'get_length'。
2. 修正错误

1)修改按钮排列情况
通过修改button的排列方式,改变按纽横向排列。
self.open_button.pack(side="left")2) 修复get_length属性错误
采用ChatGPT的网页版对之前的编写的初步代码进行追加提问:



追加提问

原来,错误的原因是pygame的版本更新的问题,在重新根据新的代码样例对原代码进行修改之后,代码最终运行成功。
三、源码展示

以下是最终实现的代码,供大家学习参考。
import tkinter as tk
from tkinter import filedialog
import pygame
import os

class MusicPlayer:
    def __init__(self, master):
        self.master = master
        master.title("Music Player")

        # 播放状态
        self.playing = False

        # 初始化pygame mixer
        pygame.mixer.init()

        # 创建控件
        self.create_widgets()

    def create_widgets(self):
        # 播放按钮
        self.play_button = tk.Button(self.master, text="Play", command=self.play_music)
        self.play_button.pack(side="left")

        # 暂停按钮
        self.pause_button = tk.Button(self.master, text="Pause", command=self.pause_music)
        self.pause_button.pack(side="left")

        # 停止按钮
        self.stop_button = tk.Button(self.master, text="Stop", command=self.stop_music)
        self.stop_button.pack(side="left")

        # 打开按钮
        self.open_button = tk.Button(self.master, text="Open", command=self.open_file)
        self.open_button.pack(side="left")

        # 音量控制
        self.volume_slider = tk.Scale(self.master, from_=0, to=1, resolution=0.1, orient=tk.HORIZONTAL, command=self.set_volume)
        self.volume_slider.set(0.5)
        self.volume_slider.pack()

        # 进度条
        self.progress_slider = tk.Scale(self.master, from_=0, to=100, orient=tk.HORIZONTAL, command=self.set_progress)
        self.progress_slider.pack()

    def play_music(self):
        if not self.playing:
            pygame.mixer.music.play()
            self.playing = True

    def pause_music(self):
        if self.playing:
            pygame.mixer.music.pause()
            self.playing = False

    def stop_music(self):
        pygame.mixer.music.stop()
        self.playing = False

    def open_file(self):
        file_path = tk.filedialog.askopenfilename(defaultextension=".mp3", filetypes=[("MP3 files", "*.mp3")])
        if file_path:
            pygame.mixer.music.load(file_path)
            self.music = pygame.mixer.Sound(file_path)
            self.playing = False
            self.play_music()

    def set_volume(self, volume):
        pygame.mixer.music.set_volume(float(volume))

    def set_progress(self, progress):
        progress_seconds = float(progress) * self.music.get_length() / 100
        pygame.mixer.music.set_pos(progress_seconds)

# 创建主窗口
root = tk.Tk()

# 创建音乐播放器
music_player = MusicPlayer(root)

# 运行主循环
root.mainloop()三、学后反思


  • ChatGPT在进行复杂编程时可能由于Python模块的升级而产生报错的情况,这时我们可以进行追加提问的方法,找出错误的原因和解决的办法,然后对原来的代码进行调整。
  • 在提问时,问题描述一定要清晰,在界面不符合要求时可以根据自己已经掌握的编程知识进行修改,当没有适合自己的答案时也可以借助搜索工具。
  • ChatGPT的编程能力已经超出我们的想象,如果有好的想法不妨就去问一问,调试代码时也不要怕报错,耐心地进行debug,但是前提是自己一定要良好的基础编程能力。
  • 鉴于ChatGPT在编程能力的优秀表现,我们可以在学习编程、开发软件、调试软件过程中充分发挥其对代码的理解和解读能力,快速地帮助我们解决编程过程中遇到的难题,从而提升编程学习和软件开发的效率。
关注我,一个喜欢Python的文科生,带给你不一样的学习体验。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|开发者网络

GMT+8, 2025-6-8 18:12 , Processed in 0.083119 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表