자음을 유지한 상태에서 음성의 정음 구간을 삭제합니다

무성 구간이 너무 거추장스러워 지우고 싶다


DN에 사운드 데이터를 제공할 때 무성 구간은 대적이다.특히 지금 내가 진행하고 있는 실시간 음성 전환은 매우 번거롭다.그래서 그거 빼고

레코드 수정


5/22: 코드를 미디어/2 이하 내용에서 max 상수 이하 부분으로 변경하는 방법.이쪽의 진동은 비교적 적다.

메서드


청음 구간의 삭제 자체는pydub이다.silence.split_on_silence, librosa, librosa.effects.스플릿으로 하면 돼요.
그런데 이런 수법들.
  • db단위로 무음구간을 정의하여 자음
  • 을 삭제하였습니다.
  • FT 등을 집중적으로 진행할 때도 오차부분을 고려하여 변환
  • 이런 문제점이 있다.둘 다 최대한 피하고 싶어요.
    그래서 저는 이산여현변환->그렇게 무성구간 삭제 형식을 취했습니다.

    코드

    sound = np.array(sound.get_array_of_samples()).astype('f')
    sound = sound[:2 ** 18].reshape((-1, 2 ** 9))
    
    convert = dct(sound, norm='ortho')
    
    abs_c = np.abs(convert)[:, :comp//2]
    where = np.where(np.max(abs_c, axis=1) < 512)[0]
    
    convert = np.delete(convert, where, axis=0)
    
    이산여현을 변환한 값을 절대값으로 덧붙이다.무성은 기본적으로 낮은 주파수의 사람에게 에너지를 가져다 주지 않기 때문에 생략할 수 있다.
    256까지 사용한 이유는 자음이 낮은 주파수에서 에너지가 없기 때문이다.32등, 수치가 더 낮으면 자음은 일반적인 수법처럼 사라진다.
    중앙치를 2로 나누는 것은 사라지는 느낌이 있기 때문이다.어쩌면 방법이 있을지도 몰라.
    이전의 방법이 상황에 의해 지나치게 좌우되었기 때문에 맥스로 더욱 간단하게 고려하기로 결정했습니다.만약 그렇다면 소리가 작은 데이터는 기본적으로 남지 않기 때문에 적당한 음량으로 녹음해야 한다.

    결실


    스펙트럼을 실을 때.

    before



    after



    (고주파대 미출력)
    잘 지워졌다는 거 알아요.사운드 체크해도 사라지지 않아 딱 좋아.
    좀 더 보편적인 방법이 있었으면 좋겠어요.

    좋은 웹페이지 즐겨찾기