此处将为大家介绍关于如何用Python编写立体声WAV文件?的详细内容,并且为您解答有关python生成wav文件的相关问题,此外,我们还将为您介绍关于在Python中立体声到单声道wav、如何使用p
此处将为大家介绍关于如何用Python编写立体声WAV文件?的详细内容,并且为您解答有关python生成wav文件的相关问题,此外,我们还将为您介绍关于在Python中立体声到单声道wav、如何使用python连接两个WAV文件?、如何在python中播放wav文件?、如何在Python中编写24位WAV文件?的有用信息。
本文目录一览:- 如何用Python编写立体声WAV文件?(python生成wav文件)
- 在Python中立体声到单声道wav
- 如何使用python连接两个WAV文件?
- 如何在python中播放wav文件?
- 如何在Python中编写24位WAV文件?
如何用Python编写立体声WAV文件?(python生成wav文件)
以下代码将频率为400Hz的简单正弦写入单声道WAV文件。为了产生 立体声 WAV文件,应如何更改此代码。第二个频道应处于不同的频率。
import mathimport waveimport structfreq = 440.0data_size = 40000fname = "WaveTest.wav"frate = 11025.0 # framerate as a floatamp = 64000.0 # multiplier for amplitudesine_list_x = []for x in range(data_size): sine_list_x.append(math.sin(2*math.pi*freq*(x/frate)))wav_file = wave.open(fname, "w")nchannels = 1sampwidth = 2framerate = int(frate)nframes = data_sizecomptype = "NONE"compname = "not compressed"wav_file.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))for s in sine_list_x: # write the audio frames to file wav_file.writeframes(struct.pack(''h'', int(s*amp/2)))wav_file.close()
答案1
小编典典sine_list_y
使用另一个频率/频道set来构建一个并行列表nchannels=2
,并在输出循环for s, t inzip(sine_list_x, sine_list_y):
中将其用作标题子句,并使用两个writeframes
调用来创建主体-
一个用于s
,一个用于t
。IOW,文件中两个通道的对应帧“交替”。
例如参见本页面的所有可能的WAV文件格式的全面描述,我引用:
多通道数字音频样本存储为隔行波形数据,这仅意味着在前进到下一个样本之前,通过循环浏览每个通道的音频样本来存储多通道(例如立体声和环绕声)波形文件的音频样本时间。这样做是为了可以在读取整个文件之前播放或流式传输音频文件。当从磁盘播放大文件(可能不完全适合内存)或通过Internet流式传输文件时,这非常方便。下图中的值将按照在“值”列(从上到下)中列出的顺序存储在Wave文件中。
下表清楚地显示了通道的样本向左,向右,向左,向右,…
在Python中立体声到单声道wav
我知道这个音频数据如果立体声存储为多维数组,如
audiodata[[left right] [left right] ... [left right]]
然后我使用此方法通过(右)/ 2创建一个新的单声道音频数据阵列
def stereoToMono(audiodata) newaudiodata = [] for i in range(len(audiodata)): d = (audiodata[i][0] + audiodata[i][1])/2 newaudiodata.append(d) return np.array(newaudiodata,dtype='int16')
然后我用文件将其写入文件
wavfile.write(newfilename,sr,newaudiodata)
这产生了一个Mono wav文件,但声音很脏并且整个点击等
我究竟做错了什么?
解决方法
audiodata = audiodata.astype(float)
其次,不要按元素编写Python代码元素;矢量化它:
d = (audiodata[:,0] + audiodata[:,1]) / 2
甚至更好
d = audiodata.sum(axis=1) / 2
这将比您编写的逐个元素循环快得多.
如何使用python连接两个WAV文件?
我正在使用python编程语言,我想在另一个wav文件的末尾加入一个wav文件吗?我在论坛上有一个问题,建议如何合并两个wav文件,即以一个特定的偏移量添加一个wav文件的内容,但是我想在彼此末尾加入两个wav文件…
而且我也有一个问题,使用winsound模块来播放我自己的wav文件。.我能够播放声音,但使用time.sleep一定的时间才能播放任何Windows声音,这是如果我想播放一个声音的缺点。声音更长的时间。sleep(N),也N秒钟,N秒钟播放winsound并停止后,窗口声音会重叠。
任何人都可以帮忙吗?请友好地建议如何解决这些问题…
提前致谢
如何在python中播放wav文件?
我尝试pygame播放wav文件,如下所示:
import pygame
pygame.init()
pygame.mixer.music.load("mysound.wav")
pygame.mixer.music.play()
pygame.event.wait()
但是它改变了声音,我不知道为什么!我阅读了此链接解决方案,但无法解决播放wave文件的问题!
对于此解决方案,我不知道应该导入什么?
s = Sound()
s.read('sound.wav')
s.play()
对于这个解决方案/ dev / dsp在新版本的linux中不存在:
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype,compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE,nc,fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
而当我尝试pyglet它给我这个错误:
import pyglet
music = pyglet.resource.media('mysound.wav')
music.play()
pyglet.app.run()
--------------------------
nima@ca005 Desktop]$ python play.py
Traceback (most recent call last):
File "play.py",line 4,in <module>
music = pyglet.resource.media('mysound.wav')
File "/usr/lib/python2.7/site-packages/pyglet/resource.py",line 587,in media
return media.load(path,streaming=streaming)
File "/usr/lib/python2.7/site-packages/pyglet/media/__init__.py",line 1386,in load
source = _source_class(filename,file)
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py",line 194,in __init__
format = wave_form.get_format_chunk()
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py",line 174,in get_format_chunk
for chunk in self.get_chunks():
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py",line 110,in get_chunks
chunk = cls(self.file,name,length,offset)
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py",line 155,in __init__
raise RIFFFormatException('Size of format chunk is incorrect.')
pyglet.media.riff.RIFFFormatException: Size of format chunk is incorrect.
AL lib: ReleaseALC: 1 device not closed
如何在Python中编写24位WAV文件?
我想使用Python
2.7从-1和1之间的浮点值数组生成24位WAV格式的音频文件。我不能使用scipy.io.wavfile.write,因为它仅支持16位或32位。Python自己的wave模块的文档未指定所需的数据格式。
那么可以在Python中做到这一点吗?
答案1
小编典典在wavio
(也是在PyPI:https://pypi.python.org/pypi/wavio上)中提供了另一个选项,这是我创建的一个小模块,用于解决scipy尚不支持24位WAV文件的问题。该文件wavio.py
包含函数write
,该函数将numpy数组写入WAV文件。要写入24位文件,请使用参数sampwidth=3
。的唯一依赖项wavio
是numpy;wavio
使用标准库wave
处理WAV文件格式。
例如,
In [21]: import numpy as npIn [22]: import wavioIn [23]: rate = 22050 # samples per secondIn [24]: T = 3 # sample duration (seconds)In [25]: f = 440.0 # sound frequency (Hz)In [26]: t = np.linspace(0, T, T*rate, endpoint=False)In [27]: sig = np.sin(2 * np.pi * f * t)In [28]: wavio.write("sine24.wav", sig, rate, sampwidth=3)
关于如何用Python编写立体声WAV文件?和python生成wav文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于在Python中立体声到单声道wav、如何使用python连接两个WAV文件?、如何在python中播放wav文件?、如何在Python中编写24位WAV文件?的相关信息,请在本站寻找。
本文标签: