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 请问读取环境变量文件失败是什么原因?
    • ¥15 在若依框架下实现人脸识别
    • ¥15 网络科学导论,网络控制
    • ¥100 安卓tv程序连接SQLSERVER2008问题
    • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
    • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
    • ¥15 关于arduino编程toCharArray()函数的使用
    • ¥100 vc++混合CEF采用CLR方式编译报错
    • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
    • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载