matlab 怎么获得wav的时间长度,获取.wav文件长度或持续时间

持续时间等于帧数除以帧率(每秒帧数):import wave

import contextlib

fname = '/tmp/test.wav'

with contextlib.closing(wave.open(fname,'r')) as f:

frames = f.getnframes()

rate = f.getframerate()

duration = frames / float(rate)

print(duration)

关于@edwards的评论,下面是一些生成双通道wave文件的代码:import math

import wave

import struct

FILENAME = "/tmp/test.wav"

freq = 440.0

data_size = 40000

frate = 1000.0

amp = 64000.0

nchannels = 2

sampwidth = 2

framerate = int(frate)

nframes = data_size

comptype = "NONE"

compname = "not compressed"

data = [(math.sin(2 * math.pi * freq * (x / frate)),

math.cos(2 * math.pi * freq * (x / frate))) for x in range(data_size)]

try:

wav_file = wave.open(FILENAME, 'w')

wav_file.setparams(

(nchannels, sampwidth, framerate, nframes, comptype, compname))

for values in data:

for v in values:

wav_file.writeframes(struct.pack('h', int(v * amp / 2)))

finally:

wav_file.close()

如果在音频播放器中播放生成的文件,则会发现持续时间为40秒。如果运行上面的代码,它也会将持续时间计算为40秒。所以我相信帧数不受通道数的影响,上面的公式是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值