|
0 / 0 / 0
Регистрация: 09.06.2022
Сообщений: 3
|
|
МП-3 плеер21.02.2023, 12:47. Показов 2187. Ответов 0
Метки нет (Все метки)
1.Нужно сделать чтобы музыка играла одна за другой если нажать кнопку плей, сейчас проигрывает только 1 песню
2.создать Метод AddSong который должен добавить новую песню в конец списка Кому не трудно может выполнить данные 2 задачи, понимаю они простенькие но я 'перегрелся похоже' с учёбой Сам код: from tkinter import filedialog #библиотека для выбора папки из всплывающего окна для добавления музыки from tkinter import * #библиотека графического пользовательного интерфейса import pygame # библиотека для создания игр для плеера подойдёт import os # устанавливается по умолчанию '''root = Tk() #инициализация приложения root.title('MP-3 Pleer') #название приложения root.geometry("500x300") #размер окна pygame.mixer.init() #позволит нам воспроизводить музыку #создаём меню нашего плеера где можно будет добавлять песни и т.п. menubar = Menu(root) root.config(menu=menubar) #создали и добавили в корневое окно #создаём пару переменных для загрузки песен songs = [] #массив песен current_song = "" #текущие песни pause = False #пауза не включена #создаём функцию для добавления музыки def load_music(): global current_song #создаём глобальную текущую музыку для точного отображения её root.directory = filedialog.askdirectory() #при нажатии будет появляться всплывающее окно в котором сможем выбрать папку for song in os.listdir(root.directory): #перебираем файлы в каталоге который мы выбрали name, ext = os.path.splitext(song) #разделяем файлы на имя и расширение файлов if ext == '.mp3': #если расширение у имени файла равно .mp3 songs.append(song) # мы добавляем его в массив песен songs 2. #def add_song(): for song in songs: songlist.insert("end",song) #музыка будет добавляться в конец songlist.select_set(0) #выбираем первую добавленную музыку из плейлиста current_song = songs[songlist.curselection()[0]] #текущяя песня будет выбранна самая первая в списке #будем определять воспроизведение и остановку музыки 1. def play_music(): global current_song, paused if not pause: pygame.mixer.music.load(os.path.join(roo t.directory, current_song)) #можем загрузить музыку pygame.mixer.music.play() #начнётся воспроизведение else: pygame.mixer.music.unpause() #отменить паузу paused=False def pause_music(): global pause pygame.mixer.music.pause() pause = True def next_music(): global current_song, paused try: songlist.select_clear(0, END) songlist.select_set(songs.index(current_ song) + 1) current_song = songs[songlist.curselection()[0]] play_music() except: pass def prev_music(): global current_song, paused try: songlist.select_clear(0, END) #выделение песен от начала и до конца songlist.select_set(songs.index(current_ song) - 1) #выбор песен , от текущего индекса текущей песни отнимаем 1 , выбирая тем самым предыдущую по списку песню current_song = songs[songlist.curselection()[0]] #предыдущая песня становится текущей play_music() except: pass organise_menu = Menu(menubar, tearoff=False) #создаём organize_menu #tearoff отключаем отрыв меню organise_menu.add_command(label='Add music', command=load_music) #добавляем в него команду menubar.add_cascade(label='Menu', menu=organise_menu) #добавляем organise_menu в строку menu #создали чёрный ящик где будут распологаться название песен songlist = Listbox(root, bg="black", fg="white", width=100, height=15) songlist.pack() #загрузили фотографии(png) для управления(пауза,старт,вперёд,назад,доба вить) play_btn_image = PhotoImage(file='play.png') pause_btn_image = PhotoImage(file='pause.png') next_btn_image = PhotoImage(file='next.png') prev_btn_image = PhotoImage(file='previous.png') #add_btn_image = PhotoImage(file='pngwing.com (2).png') #создаём фрейм для будующих кнопок control_frame = Frame(root) control_frame.pack() #создали кнопки с нашими png изображениями play_btn = Button(control_frame, image=play_btn_image, borderwidth=0, command=play_music) pause_btn = Button(control_frame, image=pause_btn_image, borderwidth=0, command=pause_music) next_btn = Button(control_frame, image=next_btn_image, borderwidth=0, command=next_music) prev_btn = Button(control_frame, image=prev_btn_image, borderwidth=0,command=prev_music) 2. #add_btn = Button(control_frame, image=add_btn_image, borderwidth=0) #создаём сетку чтобы расположить наши кнопки в одной строке но в разных столбцах play_btn.grid(row=0, column=1, padx=7, pady=10) pause_btn.grid(row=0, column=2, padx=7, pady=10) next_btn.grid(row=0, column=3, padx=7, pady=10) prev_btn.grid(row=0, column=0, padx=7, pady=10) 2. #add_btn.grid(row=0, column=4, padx=7, pady=10) root.mainloop() #запускаем наш плеер''' Добавлено через 1 минуту ребуется разработать модуль для обеспечения работы с плейлистом. Модуль должен обладать следующими возможностями: Play - начинает воспроизведение Pause - приостанавливает воспроизведение AddSong - добавляет в конец плейлиста песню Next воспроизвести след песню Prev воспроизвести предыдущую песню Технические требования Должен быть описан четко определенный интерфейс для взаимодействия с плейлистом Плейлист должен быть реализован с использованием двусвязного списка. Каждая песня в плейлисте должна иметь свойство Duration. Воспроизведение песни не должно блокировать методы управления. Метод воспроизведения должен начать воспроизведение с длительностью, ограниченной свойством Duration песни. Воспроизведение должно эмулироваться длительной операцией. Следующая песня должна воспроизводиться автоматически после окончания текущей песни. Метод Pause должен приостановить текущее воспроизведение, и когда воспроизведение вызывается снова, оно должно продолжаться с момента паузы. Метод AddSong должен добавить новую песню в конец списка. Вызов метода Next должен начать воспроизведение следущей песни. Таким образом текущее спроизведение должно быть остановлено и начато воспроизведение следущей песни Вызов метода Prev должен остановить текущее воспроизведение и начать воспроизведение предыдущей песни. Реализация метода AddSong должна проводиться с учетом одновременного, конкурентного доступа. Следует учитывать, что воспроизведение может быть остановлено извне Реализация методов Next/Prev должна проводиться с учетом одновременного, конкурентного доступа. Примечание: Все реализации должны быть тщательно протестированы и оптимизированы с точки зрения производительности. поясните, пожалуйста, 'зелёному' что я ещё не сделал, буду благодарен
0
|
|
| 21.02.2023, 12:47 | |
|
Ответы с готовыми решениями:
0
Плеер на питоне Youtube API. Каким образом генерируется плеер? Замена другого блока на плеер Nokia x1-01 мр3 плеер лучше звучит, чем просто отдельный дешевенький плеер ? |
| 21.02.2023, 12:47 | |
|
Помогаю со студенческими работами здесь
1
плеер YouTube работает как мини плеер
Плеер плеер Плеер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|