Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.io.wavfile.write无声音_Python_Scipy - Fatal编程技术网

Python scipy.io.wavfile.write无声音

Python scipy.io.wavfile.write无声音,python,scipy,Python,Scipy,我想在.wav文件中写入信号,但当我使用 scipy.io.wavfile.编写它,只需为我创建一个没有声音的.wav文件。 .wav具有良好的长度,但没有声音。 我想找到解决这个问题的办法,但找不到帮助。 我的代码如下: 将scipy作为sp导入 将numpy作为np导入 dt=np.dtype(np.int32) sig=np.fromfile(文件名,dtype=dt,count=-1,sep='') sp.io.wavfile.write('sound.wav',int(fS),sig

我想在.wav文件中写入信号,但当我使用 scipy.io.wavfile.编写它,只需为我创建一个没有声音的.wav文件。 .wav具有良好的长度,但没有声音。 我想找到解决这个问题的办法,但找不到帮助。 我的代码如下:


将scipy作为sp导入
将numpy作为np导入
dt=np.dtype(np.int32)
sig=np.fromfile(文件名,dtype=dt,count=-1,sep='')
sp.io.wavfile.write('sound.wav',int(fS),sig)

作为测试,我还做了一个小功能:

    def write_wav_sin(name,fs,f):
        x = np.linspace(0,10,10*fs)
        dt = np.dtype(np.float32)
        sig = np.sin(2*math.pi*f*x, dtype=dt)
        print(type(sig[0]))
        sp.io.wavfile.write(name, fs, sig) 
        plt.plot(x,sig)
对于这个测试,它可以工作,但是对于我的其他代码,它不工作


有人知道我为什么会遇到这个问题吗?

下面是一个有评论的示例,介绍了如何生成一个具有设置的持续时间、频率、体积和样本数的基本wave文件。利用和Python的库

import numpy as ny
import struct
import wave


class SoundFile:
   def  __init__(self, signal):
       # https://docs.python.org/3.6/library/wave.html#wave.open
       self.file = wave.open('test.wav', 'wb')
       self.signal = signal
       self.sr = 44100

   def write(self):
       # https://docs.python.org/3.6/library/wave.html#wave.Wave_write.setparams
       self.file.setparams( ( 1, 2, self.sr, 44100 * 4, 'NONE', 'noncompressed' ) )
       # https://docs.python.org/3.6/library/wave.html#wave.Wave_write.writeframes
       self.file.writeframes( self.signal )
       self.file.close()

# signal settings
duration = 4 # duration in Seconds
samplerate = 44100 # Hz (frequency) 
samples = duration * samplerate # aka samples per second
frequency = 440 # Hz
period = samplerate / float( frequency ) # of samples
omega = ny.pi * 2 / period # calculate omega (angular frequency)
volume = 16384 # 16384 is the volume measure (max is 32768)

# create sin wave
xaxis = ny.arange( samples, dtype = ny.float )
ydata = volume * ny.sin( xaxis * omega )

# fill blanks
signal = ny.resize( ydata, ( samples, ) )

#create sound file
f = SoundFile( signal )
f.write()

print( 'sound file created' )

我尽我所能评论、更新和修改随机博主的源代码。

下面是一个评论示例,介绍如何生成一个具有设置的持续时间、频率、体积和样本数的基本wave文件。利用和Python的库

import numpy as ny
import struct
import wave


class SoundFile:
   def  __init__(self, signal):
       # https://docs.python.org/3.6/library/wave.html#wave.open
       self.file = wave.open('test.wav', 'wb')
       self.signal = signal
       self.sr = 44100

   def write(self):
       # https://docs.python.org/3.6/library/wave.html#wave.Wave_write.setparams
       self.file.setparams( ( 1, 2, self.sr, 44100 * 4, 'NONE', 'noncompressed' ) )
       # https://docs.python.org/3.6/library/wave.html#wave.Wave_write.writeframes
       self.file.writeframes( self.signal )
       self.file.close()

# signal settings
duration = 4 # duration in Seconds
samplerate = 44100 # Hz (frequency) 
samples = duration * samplerate # aka samples per second
frequency = 440 # Hz
period = samplerate / float( frequency ) # of samples
omega = ny.pi * 2 / period # calculate omega (angular frequency)
volume = 16384 # 16384 is the volume measure (max is 32768)

# create sin wave
xaxis = ny.arange( samples, dtype = ny.float )
ydata = volume * ny.sin( xaxis * omega )

# fill blanks
signal = ny.resize( ydata, ( samples, ) )

#create sound file
f = SoundFile( signal )
f.write()

print( 'sound file created' )

我尽了最大努力通过随机博客评论、更新和修改源代码。

通过打印
sig.min()
sig.max()
检查
sig
中的值范围。这些值不是通过
wavfile.write来缩放的,因此可能是您的文件的值太低,以至于您听不到它们

尝试放大32位整数值,或将数据写入规范化的32位浮点。例如,这会在保存前将
sig
转换为[-1,1]范围内的32位浮点值:

m = np.max(np.abs(sig))
sigf32 = (sig/m).astype(np.float32)
sp.io.wavfile.write('sound.wav', int(fS), sigf32)

通过打印
sig.min()
sig.max()
检查
sig
中的值范围。这些值不是通过
wavfile.write来缩放的,因此可能是您的文件的值太低,以至于您听不到它们

尝试放大32位整数值,或将数据写入规范化的32位浮点。例如,这会在保存前将
sig
转换为[-1,1]范围内的32位浮点值:

m = np.max(np.abs(sig))
sigf32 = (sig/m).astype(np.float32)
sp.io.wavfile.write('sound.wav', int(fS), sigf32)

最后,我将所有信号的最大振幅除以更小的值(有时我的信号的振幅为500000,将其写入一个波形,我将其除以250000)

使用这个技巧,我可以听到声音,但有一些奇怪的东西,比如附加的伪影/噪声(我将其与使用matlab获得的.wav进行比较,使用相同的文件)

我使用的代码是:

    import scipy as sp
    import numpy as np
    dt = np.dtype(np.int32)
    sig = np.fromfile(filename, dtype=dt, count=-1, sep='')
    sp.io.wavfile.write('sound.wav', int(fS), sig/250000)

最后,我将所有信号的最大振幅除以更小的值(有时我的信号的振幅为500000,将其写入一个波形,我将其除以250000)

使用这个技巧,我可以听到声音,但有一些奇怪的东西,比如附加的伪影/噪声(我将其与使用matlab获得的.wav进行比较,使用相同的文件)

我使用的代码是:

    import scipy as sp
    import numpy as np
    dt = np.dtype(np.int32)
    sig = np.fromfile(filename, dtype=dt, count=-1, sep='')
    sp.io.wavfile.write('sound.wav', int(fS), sig/250000)

嗨,诺亚,谢谢你的回答。这个代码适合你吗?我尝试了这段代码,但由于行:ssignal=''.join((信号中项的wave.struct.pack('h',item))struct.error:必需的参数不是整数,所以它不起作用。@AntoineV对此我很抱歉。我使用较旧版本的Python进行了测试。我已经用工作代码更新了原来的帖子<在更高版本的NumPy/Python中不再需要代码>结构包
;调整阵列的大小,然后创建一个新的声音文件实例(不打包),这将提供我们想要的输出。享受任何问题,请随时提问。嗨@Noah,谢谢你的回答。这个代码适合你吗?我尝试了这段代码,但由于行:ssignal=''.join((信号中项的wave.struct.pack('h',item))struct.error:必需的参数不是整数,所以它不起作用。@AntoineV对此我很抱歉。我使用较旧版本的Python进行了测试。我已经用工作代码更新了原来的帖子<在更高版本的NumPy/Python中不再需要代码>结构包
;调整阵列的大小,然后创建一个新的声音文件实例(不打包),这将提供我们想要的输出。享受任何问题,请随时提问。请看我的答案。请看我的答案。您好@warren,通过您的缩放,它工作得更好,不再有任何瑕疵/噪音,谢谢!您好@warren,通过您的缩放,它工作得更好,不再有瑕疵/噪音,谢谢!