我正在尝试读取一个wav文件,然后操作其内容,逐个样本
这是我到目前为止所拥有的:
import scipy.io.wavfile
import math
rate, data = scipy.io.wavfile.read('xenencounter_23.wav')
for i in range(len(data)):
data[i][0] = math.sin(data[i][0])
print data[i][0]
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
0
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
等等
它正在读取,因为如果我写,print data[i]我通常得到大小为2的非零数组.
War*_*ser 14
data返回的数组wavfile.read是一个具有整数数据类型的numpy数组.numpy数组的数据类型无法就地更改,因此这一行:
data[i][0] = math.sin(data[i][0])
Run Code Online (Sandbox Code Playgroud)
将结果转换为math.sin整数,该整数始终为0.
而不是该行,创建一个新的浮点数组来存储您的计算结果.
或者用于一次numpy.sin计算数组中所有元素的正弦值:
import numpy as np
import scipy.io.wavfile
rate, data = scipy.io.wavfile.read('xenencounter_23.wav')
sin_data = np.sin(data)
print sin_data
Run Code Online (Sandbox Code Playgroud)
从您的附加注释中,您似乎想要获取每个值的正弦值并将结果写为新的wav文件.
这是一个(我认为)做你想要的例子.我将从这里使用文件'M1F1-int16-AFsp.wav':http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples.html .该功能show_info只是说明每个步骤结果的便捷方式.如果您使用的是交互式shell,则可以使用它来检查变量及其属性.
import numpy as np
from scipy.io import wavfile
def show_info(aname, a):
print "Array", aname
print "shape:", a.shape
print "dtype:", a.dtype
print "min, max:", a.min(), a.max()
print
rate, data = wavfile.read('M1F1-int16-AFsp.wav')
show_info("data", data)
# Take the sine of each element in `data`.
# The np.sin function is "vectorized", so there is no need
# for a Python loop here.
sindata = np.sin(data)
show_info("sindata", sindata)
# Scale up the values to 16 bit integer range and round
# the value.
scaled = np.round(32767*sindata)
show_info("scaled", scaled)
# Cast `scaled` to an array with a 16 bit signed integer data type.
newdata = scaled.astype(np.int16)
show_info("newdata", newdata)
# Write the data to 'newname.wav'
wavfile.write('newname.wav', rate, newdata)
Run Code Online (Sandbox Code Playgroud)
这是输出.(初始警告意味着文件中可能存在一些不被理解的元数据scipy.io.wavfile.read.)
<snip>/scipy/io/wavfile.py:147: WavFileWarning: Chunk (non-data) not understood, skipping it.
WavFileWarning)
Array 'data'
shape: (23493, 2)
dtype: int16
min, max: -7125 14325
Array 'sindata'
shape: (23493, 2)
dtype: float32
min, max: -0.999992 0.999991
Array 'scaled'
shape: (23493, 2)
dtype: float32
min, max: -32767.0 32767.0
Array 'newdata'
shape: (23493, 2)
dtype: int16
min, max: -32767 32767
Run Code Online (Sandbox Code Playgroud)
新文件'newname.wav'包含两个带符号16位值的通道.
| 归档时间: |
|
| 查看次数: |
32908 次 |
| 最近记录: |