如何检测Wav音频中是否存在一个或多个“空白区域”?

2024-09-30 01:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个中国人,我的英语很差,希望你能理解。你知道吗

我需要检查wave audio的波形是否有“空白区域”。你知道吗

empty area in wav file

我用“采样率,X=scipy.io.wav文件.read(路径)”。你知道吗

X是一个numpy数组,你知道的。你知道吗

从导出的txt文件看,数组大约是50K行,要检测的“空白区域”数据是大量重复的0。你也知道。你知道吗

在我在谷歌找到的例子中,他们使用了for循环。 就像这样:

sample_rate, X = scipy.io.wavfile.read(path)
    c=0
    for i in X:
        if i==0:
            c=c+1
    if c>100: #
        print("it has empty area")

只是简单的计数。你知道吗

所以如果只有一个“空区”,它可能工作,但我的音频有多个“空区”,我应该如何编写代码?你知道吗


Tags: 文件io路径区域forreadifscipy
1条回答
网友
1楼 · 发布于 2024-09-30 01:21:59

也许,用一些类似的表达

(?:(?:0{4}\s){8}){1,}

你可以去掉那些零行,我猜,它们可能看起来像:

import re

regex = r"(?:(?:0{4}\s){8}){1,}"
string = """
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
1000 0000 0100 0100 112b 0000 2256 0000
0200 1000 6461 7461 96a5 0400 0000 feff
0000 feff ffff fdff ffff feff 0100 fdff
ffff feff ffff 0000 0000 fcff 0000 feff
0000 fcff 0000 fdff 0000 fdff 0000 fdff
ffff fdff 0000 ffff 0200 feff 0100 ffff
0200 fdff 0100 feff 0300 feff 0200 fdff
0200 feff 0300 ffff 0300 fcff 0300 feff
0500 fdff 0300 feff 0400 feff 0300 feff
0000 fdff 0400 fdff 0400 fdff 0500 feff
0600 fdff 0600 faff 0500 fcff 0600 fdff
0600 faff 0700 f9ff 0700 f8ff 0900 faff
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0900 f8ff 0800 f8ff 0b00 f8ff 0800 f6ff
0b00 f5ff 0e00 f4ff 1100 f4ff 1100 f1ff
1600 eeff 1900 edff 1900 e9ff 2100 e5ff
2a00 d6ff 3c00 b7ff ad00 be00 e300 fd00
e5ff b0ff 8ffe abfe 1b02 bdff 8dfd caff
bd00 ccfd 44ff ab00 68ff 8b00 0201 89ff
0d01 5700 05fb f100 0004 a203 c4ff e2fb
cbfd f500 5700 0101 8f02 8a03 9700 6ffe
5cfe 0900 c1ff 7bfc 56ff 3f03 28ff 39fd
13fd 2bfe 7802 8204 ee00 0903 24fe 32fa
6e01 c605 ecfe 9ffe acfc baff 7304 5b03
ef00 07fb eefb a8ff 1604 de02 f3fb d4fb
1302 5101 a001 8bff 3504 88ff 89ff d100
be04 d202 3ffa 89fa 78fe b902 c6ff e9ff
8802 dafe 5ffb 9dfd 4dfc ab02 2f04 f101

"""

print(re.sub(regex, "", string, re.DOTALL))

输出

1000 0000 0100 0100 112b 0000 2256 0000
0200 1000 6461 7461 96a5 0400 0000 feff
0000 feff ffff fdff ffff feff 0100 fdff
ffff feff ffff 0000 0000 fcff 0000 feff
0000 fcff 0000 fdff 0000 fdff 0000 fdff
ffff fdff 0000 ffff 0200 feff 0100 ffff
0200 fdff 0100 feff 0300 feff 0200 fdff
0200 feff 0300 ffff 0300 fcff 0300 feff
0500 fdff 0300 feff 0400 feff 0300 feff
0000 fdff 0400 fdff 0400 fdff 0500 feff
0600 fdff 0600 faff 0500 fcff 0600 fdff
0600 faff 0700 f9ff 0700 f8ff 0900 faff
0900 f8ff 0800 f8ff 0b00 f8ff 0800 f6ff
0b00 f5ff 0e00 f4ff 1100 f4ff 1100 f1ff
1600 eeff 1900 edff 1900 e9ff 2100 e5ff
2a00 d6ff 3c00 b7ff ad00 be00 e300 fd00
e5ff b0ff 8ffe abfe 1b02 bdff 8dfd caff
bd00 ccfd 44ff ab00 68ff 8b00 0201 89ff
0d01 5700 05fb f100 0004 a203 c4ff e2fb
cbfd f500 5700 0101 8f02 8a03 9700 6ffe
5cfe 0900 c1ff 7bfc 56ff 3f03 28ff 39fd
13fd 2bfe 7802 8204 ee00 0903 24fe 32fa
6e01 c605 ecfe 9ffe acfc baff 7304 5b03
ef00 07fb eefb a8ff 1604 de02 f3fb d4fb
1302 5101 a001 8bff 3504 88ff 89ff d100
be04 d202 3ffa 89fa 78fe b902 c6ff e9ff
8802 dafe 5ffb 9dfd 4dfc ab02 2f04 f101

如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经对其进行了解释。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗


相关问题 更多 >

    热门问题