2017-10-23 1 views
0

wav에서 오디오 데이터의 중간부터 을 8 초 정도 추출해야합니다. 파일 길이는 0:27 초입니다.중간 시간대를 wav에서 가져 오는 방법. 파이썬

- 내가 이미 한 모든 것, 분할 된 wav로 중간 9 초가 걸렸습니다. 3 부분으로 파일을 작성하고 가운데 하나를 가져갔습니다. 그러나 9 초에 8 초가 필요합니다.

그리고 num30 배열의 비트 수는 입니다.?

import scipy.io.wavfile 
import pyaudio 
import numpy as np 

(samplRate,data)=scipy.io.wavfile.read('Track48.wav') 

print 

CHANNELS=2 

p= pyaudio.PyAudio() 
         # 
nine_sec=len(data)/3 
eight_sec=2*len(data)/3 

stream = p.open(format=pyaudio.paInt16, 
         channels=CHANNELS, 
         rate=44100, 
         output=True 
         ) 

cuted_data=data[nine_sec:eight_sec] 

newdata = cuted_data.astype(np.int16).tostring() 
stream.write(newdata) 

print(cuted_data) 

감사합니다.

+0

예를 들어 – GiantsLoveDeathMetal

+1

로 작업 코드를 사용하세요? .wav 형식의 경우 정수입니다. 초당 샘플 – f5r5e5d

답변

1

pydub을 사용하면 중간의 8 초를 매우 쉽게자를 수 있습니다. pydub are here
에 대한 세부 사항 그리고 중간 팔초가 슬라이스되어 348 초 지속 시간의 wav 파일을했다

pip install pydub대로 설치할 수 있습니다.

>>> song.duration_seconds 
348.05551020408166 

또한 다른 파일 형식을 사용할 수 같은 wav, mp3, m4a, ogg 등의 수입 (데이터 세그먼트로 변환) 및 수출 등.

소스 코드

from pydub import AudioSegment 
from pydub.playback import play 

song = AudioSegment.from_wav("music.wav") 

#slice middle eight seconds of audio 
midpoint = song.duration_seconds // 2 

left_four_seconds = (midpoint - 4) * 1000 #pydub workds in milliseconds 
right_four_seconds = (midpoint + 4) * 1000 #pydub workds in milliseconds 

eight_sec_slice = song[left_four_seconds:right_four_seconds ] 

#Play slice 
play(eight_sec_slice) 

#or save to file 
eight_sec_slice.export("eight_sec_slice.wav", format="wav") 

당신이 중간 팔초 조각의 길이가 원하는 정확히대로 볼 수 있듯이. 당신이 .wav 파일에서 읽은`samplRate`를 사용하지 않는 이유

>>> eight_sec_slice.duration_seconds 
8.0 
+0

와우는 아주 잘 작동하며 도움을 주셔서 대단히 감사합니다. 나는 wav의 중간을 찾으려고 노력했다. 데이터 배열의 길이로 나누어서 파일을 만듭니다. Hz에서 샘플링 주파수 - 44100, 길이가 -1 인 44100 샘플 (1 초에 44100 샘플) 및 다른 방법으로 +44 * 44100 샘플을 추가합니다 - 44100 * 4 . 그리고 나는 그것의 정확하게 8 초를 생각한다. 그러나 당신의 방법은 많이 이해할 수 있습니다. –

+0

'pydub'는 백그라운드에서 비슷한 작업을 수행합니다. API를 확인하여 더 많은 정보를 얻을 수 있습니다. 또한, 질문에 답하지 않은 것처럼 보이지 않도록 질문을 받아들이는 것이 일반적입니다. 비록 당신이 투표에 대해 15 가지의 평판을 필요로한다고 생각 하긴하지만, 투표까지도 환영 할 것입니다. 질문을 받으면 평판이 나옵니다. 다음은 신규 사용자에 대한 평판을 얻는 방법에 대한 토론입니다. https://meta.stackexchange.com/questions/139661/how-to-get-initial-reputation-on-stack-overflow-with-the-new- 사용자 제한 - i –

관련 문제