2009-06-05 3 views
6

확장자가 ".adc"인 파일이 있습니다. 그것들은 단순히 원시 데이터 파일입니다. 나는 "Signed 16 bit"인코딩과 "16000 Khz"샘플링을 사용하여 File-> Import-> Raw 데이터를 사용하여 Audacity에서 열 수 있습니다.파이썬 원시 오디오 데이터 파일 열기

나는 파이썬과 똑같이하고 싶다. Audioop 모듈은 필자가 필요로하는 것 같지만 단순한 용도로 사용하는 방법에 대한 예제를 찾을 수없는 것 같습니다.

주요 목표는 파일을 열고 파일의 특정 위치를 재생하는 것입니다 (예 : 두 번째 10에서 두 번째 20.). 내 작업을 위해 뭔가가 있습니까?

고지.

답변

7

파일을 여는 데는 file()이 필요합니다. 위치를 찾는 데는 audioop이 필요하지 않습니다. 초를 바이트로 변환하고 파일의 필요한 바이트를 가져와야합니다. 예를 들어, 파일이 16 kHz 16 비트 모노 인 경우 초당 32,000 바이트의 데이터가 있습니다. 그래서 10 초는 파일에 320kB입니다. 파일의 적절한 위치를 찾아 적절한 바이트 수를 읽으십시오.

그리고 audioop은 가장 어려운 부분, 즉 오디오를 재생하는 데 도움이 될 수 없습니다. 이 작업을 수행하는 올바른 방법은 OS에 따라 다릅니다.

편집 : 죄송합니다. 사용자 이름이 "thelinuxer"인 것으로 나타났습니다. 리눅스에서 파이썬으로부터 오디오를 재생하려면 pyAO을 고려하십시오. 오디오를 재생하기 위해 샘플 형식을 변경해야 할 것입니다 --- audioop가 도움이 될 것입니다 (ratecv, tomono/tostereo, lin2lin 및 bias 참조)

+0

16 비트 16 비트 모노는 16,000 바이트의 데이터가 아니겠습니까? (스테레오 경우 32,000 바이트) – elias

+0

아, nvm, 알 겠어! 16 비트 == 2 바이트. 그런 다음 2 바이트 * 16 샘플/초 == 32,000 바이트/초. – elias

4

고맙게 많이 다음을 할 수있었습니다.

def play_data(filename, first_sec, second_sec): 
    import ao 
    from ao import AudioDevice 
    dev = AudioDevice(2, bits=16, rate=16000,channels=1) 
    f = open(filename, 'r') 
    data_len = (second_sec-first_sec)*32000 
    f.seek(32000*first_sec) 
    data = f.read(data_len) 
    dev.play(data) 
    f.close() 

play_data('AR001_3.adc', 2.5, 5) 
1

당신은 NumPy와 배열로 파일을 열고 python-sounddevice으로 재생 PySoundFile를 사용할 수 있습니다.

import soundfile as sf 
import sounddevice as sd 

sig, fs = sf.read('myfile.adc', channels=2, samplerate=16000, 
        format='RAW', subtype='PCM_16') 
sd.play(sig, fs) 

NumPy 배열에서 색인을 사용하여 오디오 데이터의 특정 부분을 선택할 수 있습니다.