问题描述
我一直在研究一种从样本列表中播放声音的方法,我发现一些可以做到这一点的模块.
I have been looking into a way to play sounds from a list of samples, and I found some modules that can do this.
我正在使用 AudioLazy 模块使用以下脚本播放声音:
I am using AudioLazy module to play the sound using the following script:
from audiolazy import AudioIO
sound = Somelist
with AudioIO(True) as player:
player.play(sound, rate=44100)
此代码的问题在于,它会停止整个应用程序,直到声音停止播放为止,而我不能同时播放多个声音.
The problem with this code is that it stop the whole application till the sound stop playing and I can't play multiple sound at the same time.
我的程序是交互式的,所以我想要能够同时播放多个声音,例如,我可以运行此脚本,该脚本将播放5秒的声音,然后在第二秒播放5秒再次发出声音.
My program is interactive so what I want is to be able to play multiple sound at the same time,So for instance I can run this script which will play a 5 second sound then at the second 2 I can play a 5 second sound again.
我不希望整个程序在声音播放完毕之前停止播放.
And I don't want the whole program to stop till the sound finish playing.
推荐答案
这是使用 pydub .
使用AudioSegment
模块的overlay
功能,您可以很容易地superimpose
多个音频相互连接.
这里是一个工作代码,用于组合三个音频文件.使用相同的概念,您可以将多个音频彼此组合.
pydub
也支持多种音频格式.
pydub
supports multiple audio formats as well.
from pydub import AudioSegment
from pydub.playback import play
audio1 = AudioSegment.from_file("chunk1.wav") #your first audio file
audio2 = AudioSegment.from_file("chunk2.wav") #your second audio file
audio3 = AudioSegment.from_file("chunk3.wav") #your third audio file
mixed = audio1.overlay(audio2) #combine , superimpose audio files
mixed1 = mixed.overlay(audio3) #Further combine , superimpose audio files
#If you need to save mixed file
mixed1.export("mixed.wav", format='wav') #export mixed audio file
play(mixed1) #play mixed audio file
以下是根据我们的讨论进行的更新.
首先,我们创建44KHz信号并保存到sound.wav
下一步读取wave文件并将信号保存到文本文件
然后创建输入信号的三个变体以测试覆盖.
原始信号具有dtype int16
然后我们创建三个音频片段然后按照上述方式混合/叠加.wav
信号数据存储在test.txt
Here are updates as per our discussions.
First we create 44KHz signal and save to sound.wav
Next Read wave file and save signal to text file
Then create three variations of input signal to test overlay.
Original signal has dtype int16
Then we create three audio segmentsthen mix/overlay as above.wav
signal data is stored in test.txt
修改后的代码
import numpy as np
from scipy.io.wavfile import read
from pydub import AudioSegment
from pydub.playback import play
import wave, struct, math
#Create 44KHz signal and save to 'sound.wav'
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
wavef = wave.open('sound.wav','w')
wavef.setnchannels(1) # mono
wavef.setsampwidth(2)
wavef.setframerate(sampleRate)
for i in range(int(duration * sampleRate)):
value = int(32767.0*math.cos(frequency*math.pi*float(i)/float(sampleRate)))
data = struct.pack('<h', value)
wavef.writeframesraw( data )
wavef.writeframes('')
wavef.close()
#Read wave file and save signal to text file
rate, signal = read("sound.wav")
np.savetxt('test.txt', signal, delimiter=',') # X is an array
#load wav data from text file
wavedata1 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.int16)
#Create variation of signal
wavedata2 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.int32)
#Create variation of signal
wavedata3 = np.loadtxt("test.txt", comments="#", delimiter=",", unpack=False, dtype=np.float16)
#create first audio segment
audio_segment1 = AudioSegment(
wavedata1.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
#create second audio segment
audio_segment2 = AudioSegment(
wavedata2.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
#create third audio segment
audio_segment3 = AudioSegment(
wavedata3.tobytes(),
frame_rate=rate,
sample_width=2,
channels=1
)
# Play audio (requires ffplay, or pyaudio):
play(audio_segment1)
play(audio_segment2)
play(audio_segment3)
#Mix three audio segments
mixed1 = audio_segment1.overlay(audio_segment2) #combine , superimpose audio files
mixed2 = mixed1.overlay(audio_segment3) #Further combine , superimpose audio files
#If you need to save mixed file
mixed2.export("mixed.wav", format='wav') #export mixed audio file
play(mixed2) #play mixed audio file
这篇关于在python中同时播放多个声音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!