在鼠标悬停的右侧或左侧扬声器上播放声音 [英] Playing sound on right or left Speaker on MouseOver

查看:65
本文介绍了在鼠标悬停的右侧或左侧扬声器上播放声音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 PyQt5 在 python 中制作小程序.该程序将有两个按钮,中间有一个标签.当鼠标移过标签时,我想调用一个 def,以更改按钮的颜色并从特定扬声器(左或右)播放声音

I am trying to make small program in python, using PyQt5. The program will as have two buttons, and a label in the middle. When the mouse goes over the label, I want to call a def, in order to change the button's color and play a sound from specific speaker (left or right)

我按照一些帖子尝试了 pygame,但没有.声音在两个声道中播放.

I tried pygame, following some posts, but nothing. The sound is playing in both channels.

import time
import pygame

pygame.mixer.init(44100, -16,2,2048)
channel1 = pygame.mixer.Channel(0) # argument must be int
channel2 = pygame.mixer.Channel(1)
print('OkkK')

soundObj = pygame.mixer.Sound('Aloe Blacc - Wake Me Up.wav')
channel2.play(soundObj)
soundObj.set_volume(0.2)

time.sleep(6) # wait and let the sound play for 6 second
soundObj.stop()

有没有办法解决这个问题并选择左右扬声器?

Is there a way to fix this and choose the left-right speaker?

另外,有没有办法在标签上调用定义,鼠标悬停在标签上?

Also, is there a way to call a def, On Mouse Over a label?

推荐答案

一般使用 pygame 时,更喜欢调用 pygame.init() 来初始化所有pygame 模块而不是单独输入 pygame. module .init().它将节省您的时间和代码行数.

When you use pygame in general, prefer calling pygame.init() to initialise all of the pygame modules instead of typing separately pygame. module .init(). It will save you time and lines of code.

然后,要在 pygame 中播放声音文件,我一般使用 pygame.mixer.Sound 获取文件,然后调用声音对象的play()函数.

Then, to play a sound file in pygame, I generaly use pygame.mixer.Sound to get the file, then I call the play() function of the sound object.

所以下面导入一个声音文件,然后根据鼠标X位置进行播放和平移

So the following imports a sound file, then plays and pans it according to the mouse X position

import pygame
from pygame.locals import *

pygame.init() # init all the modules

sound = pygame.sound.Sound('Aloe Blacc - Wake Me Up.wav')) # import the sound file

sound_played = False
# sound has not been played, so calling set_volume() will return an error

screen = pygame.display.set_mode((640, 480)) # make a screen

running = True
while running: # main loop
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
        elif event.type == MOUSEBUTTONDOWN: # play the sound file
            channel = sound.play()
            sound_played = True
            # start setting the volume now, from this moment where channel is defined

    # calculate the pan
    pan = pygame.mouse.get_pos()[0] / pygame.display.get_surface().get_size()[0]
    left = pan
    right = 1 - pan

    # pan the sound if the sound has been started to play
    if sound_played:
        channel.set_volume(left, right)

    pygame.display.flip()

这篇关于在鼠标悬停的右侧或左侧扬声器上播放声音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆