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

问题描述 投票:2回答:1

我是中国人,我的英语很不好,希望您能理解。

我需要检查Wave音频的波形是否具有“空白区域”。

empty area in wav file

我用“ sample_rate,X = scipy.io.wavfile.read(path)加载wav”。

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

从导出的txt文件中,数组大约有5万行,要检测的“空白区域”数据是大量重复的0。您也知道这一点。

在我在Google中找到的示例中,他们使用了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")

只是一个简单的数字。

因此,如果只有一个“空白区域”,则可能有效,但是我的音频具有多个“空白区域”,我该如何编写代码?

python python-3.x wav
1个回答
0
投票

也许,有些表达类似于,

(?:(?: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中查看它如何与某些示例输入匹配。


© www.soinside.com 2019 - 2024. All rights reserved.