Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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
使用Wave Python模块获取和写入音频_Python_Audio - Fatal编程技术网

使用Wave Python模块获取和写入音频

使用Wave Python模块获取和写入音频,python,audio,Python,Audio,因此,我尝试使用Python Wave模块获取音频文件,基本上从中获取所有帧,检查它们,然后将它们写回另一个文件。我试图将我正在读取的声音输出到另一个文件,但结果要么是噪音,要么根本没有声音。所以,我很确定我没有分析文件并得到正确的帧。。。?我正在处理一个立体声16位声音文件。虽然我可以使用一个更简单的文件来理解这个过程,但我最终希望能够接受任何类型的声音文件,因此我需要了解问题是什么 我还注意到,Wave模块无法读取32位声音文件,这给了我一个“未知格式”的错误。有什么想法吗?是不是我可以绕过

因此,我尝试使用Python Wave模块获取音频文件,基本上从中获取所有帧,检查它们,然后将它们写回另一个文件。我试图将我正在读取的声音输出到另一个文件,但结果要么是噪音,要么根本没有声音。所以,我很确定我没有分析文件并得到正确的帧。。。?我正在处理一个立体声16位声音文件。虽然我可以使用一个更简单的文件来理解这个过程,但我最终希望能够接受任何类型的声音文件,因此我需要了解问题是什么

我还注意到,Wave模块无法读取32位声音文件,这给了我一个“未知格式”的错误。有什么想法吗?是不是我可以绕过它,这样我至少可以读取32位音频文件,即使我只能“渲染”16位文件

我知道波形文件在左声道和右声道之间交错(第一个样本用于左声道,第二个样本用于右声道,等等),但是如何分离声道呢?这是我的密码。我删掉了输出代码,看看我是否正确读取了文件。我正在使用Python 2.7.2:

import scipy
import wave
import struct
import numpy
import pylab

fp = wave.open('./sinewave16.wav', 'rb') # Problem loading certain kinds of wave files in binary?

samplerate = fp.getframerate()
totalsamples = fp.getnframes()
fft_length = 2048 # Guess
num_fft = (totalsamples / fft_length) - 2

temp = numpy.zeros((num_fft, fft_length), float)

leftchannel = numpy.zeros((num_fft, fft_length), float)
rightchannel = numpy.zeros((num_fft, fft_length), float)

for i in range(num_fft):

    tempb = fp.readframes(fft_length / fp.getnchannels() / fp.getsampwidth());

    #tempb = fp.readframes(fft_length)

    up = (struct.unpack("%dB"%(fft_length), tempb))

    #up = (struct.unpack("%dB"%(fft_length * fp.getnchannels() * fp.getsampwidth()), tempb))
    #print (len(up))
    temp[i,:] = numpy.array(up, float) - 128.0


temp = temp * numpy.hamming(fft_length)

temp.shape = (-1, fp.getnchannels())

fftd = numpy.fft.rfft(temp)

pylab.plot(abs(fftd[:,1]))

pylab.show()

#Frequency of an FFT should be as follows:

#The first bin in the FFT is DC (0 Hz), the second bin is Fs / N, where Fs is the sample rate and N is the size of the FFT. The next bin is 2 * Fs / N. To express this in general terms, the nth bin is n * Fs / N.
# (It would appear to me that n * Fs / N gives you the hertz, and you can use sqrt(real portion of number*r + imaginary portion*i) to find the magnitude of the signal

目前,这将加载声音文件,将其解压到一个结构中,并绘制声音文件,以便我可以查看它,但我认为它没有获取所有的音频文件,或者它没有正确地获取它。我是否正确地将wave文件读入结构中?是否有关于使用Python读取和分析wave/audio文件的最新资源?非常感谢您的帮助。

也许您应该尝试使用SciPy io.wavefile模块:


谢谢你的建议。我来检查一下。我刚检查过,它似乎能清晰地读出音频,这很好。谢谢你的建议。链接已经死了,这是新的:@Kaifei,谢谢你的更新。我编辑了答案并更新了链接。