要实现的是,就是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
```