Как обнаружить наличие одной или нескольких «пустых областей» в аудио Wav? - PullRequest
2 голосов
/ 27 сентября 2019

Я китаец, и мой английский очень плохой, и надеюсь, вы понимаете.

Мне нужно проверить, имеет ли волновая форма волны аудио волны "пустую область".

empty area in wav file

Я загружаю wav с "sample_rate, X = scipy.io.wavfile.read (path)".

X - это пустой массив, вы его знаете.

В экспортированном текстовом файле массив занимает около 50 тыс. Строк, а данные «пустой области», которые нужно обнаружить, - это большое количествоповторил 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")

Простой подсчет.

Так что, если есть только одна «пустая область», возможно, она работает, но у моего аудио есть несколько «пустых областей», какя должен написать код?

1 Ответ

0 голосов
/ 29 сентября 2019

Возможно, с некоторым выражением, похожим на

(?:(?: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 .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


...