Python звук при нажатии

Кнопки со своим звуком

Доброго времени суток! Изучаю Kivy, подскажите, как сделать так, чтобы при нажатии на определенную кнопку играл определенный звук (то есть не одинаковый). Хочу создать подобие набиралки.

P.S. Если можно, как вместо |PHONE| в разделе Label:, сделать набираемые цифры, или меняющуюся надпись.

Вот файл my.kv. Помогите отредактировать и связать к нему код main.py с любым содержанием, лишь бы использовал инструкции файла my.kv.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#:kivy 1.4 GridLayout: cols: 1 Label: font_size: '96sp' text: "[color=#ff3333][b]|PHONE|" markup: True Button: text: "OK" font_size: 144 GridLayout: cols: 2 size_hint_y: 3 Button: text: '1' background_color: 2,0,0,1 halign: 'left' valign: 'middle' font_size: 120 Button: text: '2' background_color: 2,0,0,1 halign: 'right' valign: 'top' font_size: 120 Button: text: '3' background_color: 2,0,0,1 halign: 'left' valign: 'middle' font_size: 120 Button: text: '4' background_color: 2,0,0,1 halign: 'center' valign: 'middle' font_size: 120

Добавлено через 51 минуту
И ещё: файл my.py частично имеется, но как сделать его не на один файл и один звук, а на несколько кнопок и у каждого свой звук? И как адресовать каждую кнопку

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
from kivy.app import App from kivy.core.audio import SoundLoader from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button class ButtonSound(App): def build(self): layout = BoxLayout(padding=15, orientation='vertical') btn = Button(text="I am the Button with Sound", background_color=[0, 1, 0, 1], on_press=self.btn_pressed) layout.add_widget(btn) return layout def btn_pressed(self, instance): sound = SoundLoader.load('beep.wav') sound.play() if __name__ == "__main__": ButtonSound().run()

Источник

Читайте также:  Php объединить массивы рекурсивно

Как воспроизвести звук при нажатии кнопки tkinter?

Я создаю программу для ПК с Windows, которая содержит много кнопок и выглядит очень просто. Мне было интересно, могу ли я сделать так, чтобы при нажатии кнопки (с помощью tkinter) можно было воспроизвести звук, чтобы немного оживить программу? Пожалуйста, имейте в виду, что я учусь, поэтому, пожалуйста, немного поторопитесь.

4 ответа

Предполагая, что ваш файл WAV:

from tkinter import * from winsound import * root = Tk() # create tkinter window play = lambda: PlaySound('Sound.wav', SND_FILENAME) button = Button(root, text = 'Play', command = play) button.pack() root.mainloop() 

Предполагая, что ваш файл является MP3:

from Tkinter import * import mp3play root = Tk() # create tkinter window f = mp3play.load('Sound.mp3'); play = lambda: f.play() button = Button(root, text = 'Play', command = play) button.pack() root.mainloop() 

Вы также можете использовать библиотеку Pygame. Хотя он работает немного медленнее, чем некоторые библиотеки только для воспроизведения музыки, его основным преимуществом является то, что он кроссплатформенный, в то время как многие другие библиотеки для воспроизведения музыки на Python нет. Вот пример его использования в приложении на основе Tkinter:

from tkinter import * import pygame pygame.mixer.init() def play_music(): pygame.mixer.music.load("sample.mp3") pygame.mixer.music.play() root = Tk() Button(root, text="Play music", command=play_music).pack() root.mainloop() 

Сначала вам нужно связать щелчок мыши на изображении с помощью четного обработчика, а затем просто определить функцию on_click:

def on_click(event): winsound.Beep('frequency', 'duration') 

Здесь вы можете найти больше информации о воспроизведении звуков в Python.

import os os.system("play sound.mp3") 

Источник

Добавляем звук в игровой процесс. Модули mixer и music

Однако, смотрите, нажимая клавишу, звук появляется с задержкой. Это из-за того, что нужно выполнить команду pre_init() миксера до инициализации самого Pygame:

pygame.mixer.pre_init(44100, -16, 1, 512) # важно вызвать до pygame.init()

Теперь, при воспроизведении звуковых эффектов задержек не будет. Также вы можете заметить, что класс Sound не содержит методов для пауз. Дело в том, что весь этот функционал выносится на уровень канала или миксера в целом. Что это за каналы? Смотрите, когда мы запускаем воспроизведение из класса Sound, то автоматически создается канал, в котором происходит обработка звука. И уже на уровне канала существуют методы для пауз, остановок, затухания звучания и т.п. Это сделано для возможности одновременного воспроизведения нескольких звуковых дорожек: каждый звук работает в своем отдельном канале. А для получения ссылки на канал достаточно записать команду:

То есть, метод play возвращает ссылку на канал, в котором происходит воспроизведение. И далее, уже через переменную ch можно вызывать методы канала, например:

Если же мы хотим поставить на паузу все каналы, то следует вызвать такую же функцию на уровне всего микшера:

Добавление звуковых эффектов в игру

Теперь, когда мы в целом разобрались с работой звука в Pygame, давайте добавим звуковые эффекты в нашу игру с шариками. Смотрите, здесь вначале идет инициализация микшера:

pygame.mixer.pre_init(44100, -16, 1, 512) # важно прописать до pygame.init()

так, чтобы не было задержек при воспроизведения звука. Далее, мы загружаем и проигрываем фоновый звук, зациклив воспроизведение:

pygame.mixer.music.load('sounds/bird.mp3') pygame.mixer.music.play(-1)
s_catch = pygame.mixer.Sound('sounds/catch.ogg')
def collideBalls(): global game_score for ball in balls: if t_rect.collidepoint(ball.rect.center): s_catch.play() game_score += ball.score ball.kill()

Запускаем игру и теперь у нас все работает со звуковыми эффектами. По аналогии можно добавить и другие звуки, но это вы уже сможете сделать самостоятельно. Ссылка на эту программу в начале страницы и каждый из вас сможет внимательно ее изучить и изменять по своему усмотрению.

Источник

Воспроизведение звука при нажатии клавиши в Python

Я пишу сценарий Python, в котором каждый раз при нажатии клавиши воспроизводится звук. Я использую модуль Winsound для воспроизведения звука, и мне нужно что-то вроде этого:

import winsound while True: if any_key_is_being_pressed: # Replace this with an actual if statement. winsound.PlaySound("sound.wav", winsound.SND_ASYNC) # rest of the script goes here. 

Однако я не хочу, чтобы блок «While True» приостанавливал скрипт при его запуске. Я хочу, чтобы он работал в фоновом режиме и позволял скрипту выполняться, если это возможно даже в Python.

Возможно, я лаю не на то дерево, и мне не нужно время, правда; если есть способ воспроизводить звук при нажатии любой клавиши клавиатуры, то скажите, пожалуйста.

2 ответа

Используйте модуль pynput.keyboard,

from pynput.keyboard import Key, Listener import winsound def on_press(key): winsound.PlaySound("sound.wav", winsound.SND_ASYNC) def on_release(key): print(' release'.format( key)) if key == Key.esc: # Stop listener return False # Collect events until released with Listener( on_press=on_press, on_release=on_release) as listener: listener.join() 

Если вы хотите, чтобы ваш код выполнялся при любом нажатии клавиши, следующий код будет работать отлично

import msvcrt, winsound while True: if msvcrt.kbhit(): #Checks if any key is pressed winsound.PlaySound("sound.wav", winsound.SND_ASYNC) 

Если вы хотите выполнить свой код при определенном нажатии клавиши, этот код будет работать хорошо.

import keyboard """ using module keyboard please install before using this module pip install keyboard """ while True: try: # used try so that if user pressed other than the given key error will not be shown if keyboard.is_pressed('a'): # if key 'a' is pressed winsound.PlaySound("sound.wav", winsound.SND_ASYNC) break # finishing the loop except: break 

Источник

Как сделать на kivy кнопку воспроизводящую звук

Написать программу, воспроизводящую звук динамика на Atmega128
Нужно ввести какую-нибудь мелодию ,чтобы в AVR Studio воспроизводилась . и в последствии на JTAG’e.

Как изменить размер виджета при нажатии на кнопку в kivy?
Как изменить размер виджета при нажатии на кнопку в kivy?К примеру,при нажатии на кнопку,которая.

Как изменить размер виджета при нажатии на кнопку в kivy?
Доброго времени суток!Хочу узнать информацию об изменении размера виджета записанного в файле kivy.

Python+Kivy создать проект kivy через Master Kivy Project
Здравствуйте! Не получается создать прект, так как при вводе строки вида: python3 main.py copyright.

Эксперт по компьютерным сетям

делаете из этого функцию, вешаем на нажатие (on_press)

Эксперт по компьютерным сетям

Лучший ответ

Сообщение было отмечено KRAMBLE как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# -*- coding: utf-8 -*- from kivy.app import App from kivy.core.audio import SoundLoader from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button class ButtonSound(App): def build(self): layout = BoxLayout(padding=15, orientation='vertical') btn = Button(text="I am the Button with Sound", background_color=[0, 1, 0, 1], on_press=self.btn_pressed) layout.add_widget(btn) return layout def btn_pressed(self, instance): sound = SoundLoader.load('beep.wav') sound.play() if __name__ == "__main__": ButtonSound().run()

Источник

Оцените статью