zhouhongkai1 2023-07-22 19:47 采纳率: 33.3%
浏览 14
已结题

关于升级到win11声音变小用Python试图调大的问题

要实现的是,就是Windows11升级后,扬声器的声音变小了,而且网上也没有相关的教程,我就想能不能使用Python把它原来的声音再增加50多

现在要实现:我要在静音的情况下,获取到现在正在播放的声音(是有声音的数据,就像录恐怖游戏的时候自己害怕听到游戏里的声音,自己就静音了,但是录好的视频中观众可以听过游戏里的声音),然后保存音乐,然后打开音乐,调用Python相关的库来扩大声音,然后再次保存,然后再用ffplay播放出来
遇到的问题:无法在静音的情况下获取到正常声音(问了GPT好久,GPT也回答不出来)
已经实现了的:声音增大效果和声音播放效果,我想如果有一种程序能将某个程序发给扬声器准备进行播放的数据获取到也可以(因为这时候扬声器还没有处理播放的时候静不静音的问题)

代码如下:

import sounddevice as sd
from pydub import AudioSegment
from pydub.playback import play
import wave
from scipy.io import wavfile
import psutil
import pyaudio
import time
import os
from pycaw.pycaw import AudioUtilities, ISimpleAudioVolume


def get_playing_processes():
    playing_processes = []
    sessions = AudioUtilities.GetAllSessions()
    for session in sessions:
        volume = session._ctl.QueryInterface(ISimpleAudioVolume)
        if volume.GetMasterVolume() > 0 and session.Process:
            playing_processes.append(session.Process.name())
    return playing_processes

def mute_process(process_name):
    sessions = AudioUtilities.GetAllSessions()
    for session in sessions:
        volume = session._ctl.QueryInterface(ISimpleAudioVolume)
        if session.Process and session.Process.name() == process_name:
            volume.SetMasterVolume(0, None)
def unmute_process(process_name):
    sessions = AudioUtilities.GetAllSessions()
    for session in sessions:
        volume = session._ctl.QueryInterface(ISimpleAudioVolume)
        if session.Process and session.Process.name() == process_name:
            volume.SetMasterVolume(1, None)

#print(sd.query_devices())
sd.default.device[0] = 9

# 初始化pyaudio
p = pyaudio.PyAudio()

# 设置参数
duration = 0.0001#1毫秒
duration = 5
while True:
    recording = sd.rec(int(duration * 44100),samplerate=44100, blocking=True,channels=2)
    # 等待录制完成
    sd.wait()
    wavfile.write('output.wav',44100, recording)

    playing_processes = get_playing_processes()

##    # 禁止播放音乐
    for process_name in playing_processes:
        mute_process(process_name)
##
    audio = AudioSegment.from_file("output.wav", format="wav")
    louder_audio = audio + 50

    louder_audio.export("louder_output.wav", format="wav")
    
    #os.popen(r'cd "C:\Users\Administrator\Desktop\工具\TestPlayMusic" && ffplay -loglevel quiet -nodisp louder_output.wav')
    os.popen(r'cd "C:\Users\Administrator\Desktop\工具\TestPlayMusic" && ffplay -loglevel quiet -nodisp louder_output.wav')
    break
##
##    song = AudioSegment.from_file("louder_output.wav", format="wav")
##
##    # 播放音乐
##    stream = p.open(format=p.get_format_from_width(song.sample_width),
##                    channels=song.channels,
##                    rate=song.frame_rate,
##                    output=True)
##
##    stream.start_stream()
##
####    print(stream.is_active())
######    # 检测音乐是否播放完毕
##    for process_name in playing_processes:
##        unmute_process(process_name)
    



```python


```

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 7月22日
    • 创建了问题 7月22日

    悬赏问题

    • ¥15 Arduino,利用modbus的RS485协议,进行对外置的温湿度传感器进行数据读取
    • ¥15 vhdl+MODELSIM
    • ¥20 simulink中怎么使用solve函数?
    • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
    • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
    • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    • ¥15 知识蒸馏实战博客问题
    • ¥15 用PLC设计纸袋糊底机送料系统
    • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
    • ¥15 用C语言输入方程怎么