如何从wav中提取中间时间范围。python

如何从wav中提取中间时间范围。python,python,numpy,audio,wav,Python,Numpy,Audio,Wav,我需要从wav的音频数据中间提取大约8秒。文件长度为0:27秒 -所有我已经做过的,都是中间9秒除以wav。文件分为三个部分,取中间的一个,但它是9,我需要8 那么如何在numpy数组中找到大量的位呢 谢谢您的帮助。您可以使用pydub非常轻松地将中间8秒切成薄片。 详情 您可以作为pip安装pydub 我有一个持续时间为348秒的wav文件,其中间8秒被切片 >>> song.duration_seconds 348.05551020408166 您还可以使用不同的文件

我需要从wav的音频数据中间提取大约8秒。文件长度为0:27秒

-所有我已经做过的,都是中间9秒除以wav。文件分为三个部分,取中间的一个,但它是9,我需要8

那么如何在numpy数组中找到大量的位呢

谢谢您的帮助。

您可以使用pydub非常轻松地将中间8秒切成薄片。 详情 您可以作为pip安装pydub

我有一个持续时间为348秒的wav文件,其中间8秒被切片

>>> song.duration_seconds
348.05551020408166  
您还可以使用不同的文件格式,如wav、mp3、m4a、ogg等,用于导入、转换为数据段和导出

源代码

正如您所看到的,中间的8秒片段的长度完全符合要求

>>> eight_sec_slice.duration_seconds
8.0

我知道这个问题由来已久,但有人可能会喜欢我想提供的仅使用numpy的解决方案。不需要pydub


请以您的工作代码为例,为什么不使用从.wav文件中读取的采样率?对于.wav格式,它是一个整数:每秒采样数哇,它工作得很好,非常感谢您的帮助。我试图找到wav的中间部分。文件长度除以数据数组长度2。采样频率为Hz-44100,其第二个范围为-1秒44100个样本,我以1种方式添加+4*44100个样本,以另一种方式添加-44100*4个样本。我想这正好是8秒。但是你的方式是可以理解的。pydub在后台做类似的工作。您可能需要检查API以获得更多信息。此外,人们习惯于接受这个问题,这样就不会出现没有答案的情况。虽然我认为你需要15%的声誉来支持投票,但我们也会很感激你的支持。接受问题也会增加你账户的声誉。以下是关于如何为新用户赢得声誉的SO讨论:
from pydub import AudioSegment
from pydub.playback import play

song = AudioSegment.from_wav("music.wav")

#slice middle eight seconds of audio
midpoint = song.duration_seconds // 2

left_four_seconds = (midpoint - 4) * 1000 #pydub workds in milliseconds
right_four_seconds = (midpoint + 4) * 1000 #pydub workds in milliseconds

eight_sec_slice = song[left_four_seconds:right_four_seconds ]

#Play slice
play(eight_sec_slice )

#or save to file
eight_sec_slice.export("eight_sec_slice.wav", format="wav")
>>> eight_sec_slice.duration_seconds
8.0
import scipy.io.wavfile as wavfile

fs, data - wavefile.read("Track48.wav")

# number of samples N
N = data.shape[0]

# Convert seconds to samples
eight_secs_in_samples = float(fs)*8 # time = number_of_samples / rate

midpoint_sample = N//2 # Midpoint of sample

# substract 4 seconds from midpoint
left_side = midpoint_sample-(eight_secs_in_samples//2) 

# Add 4 seconds from midpoint up
right_side = midpoint_sample + (eight_secs_in_samples//2)

# The midpoint of samples is therefore:
mid8secs = array_data[int(left_side):int(right_side)] # this range contains the required samples
# Save the file
wavfile.write("eightSecSlice.wav",fs,mid8secs)