在Python中立体声到单声道wav

前端之家收集整理的这篇文章主要介绍了在Python中立体声到单声道wav前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用scipy方法wavefile.read()加载一个wav,它为我提供了samplerate和audiodata

我知道这个音频数据如果立体声存储为多维数组,如

  1. audiodata[[left right]
  2. [left right]
  3. ...
  4. [left right]]

然后我使用此方法通过(右)/ 2创建一个新的单声道音频数据阵列

  1. def stereoToMono(audiodata)
  2. newaudiodata = []
  3.  
  4. for i in range(len(audiodata)):
  5. d = (audiodata[i][0] + audiodata[i][1])/2
  6. newaudiodata.append(d)
  7.  
  8. return np.array(newaudiodata,dtype='int16')

然后我用文件将其写入文件

  1. wavfile.write(newfilename,sr,newaudiodata)

这产生了一个Mono wav文件,但声音很脏并且整个点击等

我究竟做错了什么?

解决方法

首先,audiodata的数据类型是什么?我假设它是一些固定宽度的整数格式,因此你会溢出.如果在处理之前将其转换为浮点格式,它将正常工作:
  1. audiodata = audiodata.astype(float)

其次,不要按元素编写Python代码元素;矢量化它:

  1. d = (audiodata[:,0] + audiodata[:,1]) / 2

甚至更好

  1. d = audiodata.sum(axis=1) / 2

这将比您编写的逐个元素循环快得多.

猜你在找的Python相关文章