2009-06-05 58 views
6

Tôi có các tệp này với phần mở rộng ".adc". Chúng đơn giản là các tệp dữ liệu thô. Tôi có thể mở chúng với Audacity bằng File-> Import-> Raw data với mã hóa "Signed 16 bit" và sample rate "16000 Khz".Python mở tệp dữ liệu âm thanh thô

Tôi muốn làm tương tự với python. Tôi nghĩ rằng mô-đun audioop là những gì tôi cần, nhưng tôi dường như không thể tìm thấy các ví dụ về cách sử dụng nó cho một cái gì đó đơn giản.

Mục tiêu chính là mở tệp và phát một vị trí nhất định trong tệp, ví dụ từ vị trí thứ hai đến thứ hai 20. Có điều gì đó ngoài đó cho công việc của tôi không?

Thanx trước.

Trả lời

7

Để mở tệp, bạn chỉ cần file(). Để tìm một vị trí, bạn không cần audioop: bạn chỉ cần chuyển đổi số giây thành byte và nhận các byte yêu cầu của tệp. Ví dụ, nếu tập tin của bạn là 16 kHz 16bit mono, mỗi giây là 32.000 byte dữ liệu. Vì vậy, lần thứ 10 là 320kB vào tệp. Chỉ cần tìm đến vị trí thích hợp trong tệp và sau đó đọc số byte thích hợp.

Và audioop không thể giúp bạn với phần khó nhất: cụ thể là, phát âm thanh. Cách chính xác để làm điều này rất nhiều phụ thuộc vào hệ điều hành của bạn.

EDIT: Rất tiếc, tôi vừa nhận thấy tên người dùng của bạn là "thelinuxer". Hãy xem xét pyAO để phát âm thanh từ Python trên Linux. Bạn có thể sẽ cần phải thay đổi định dạng mẫu để phát âm thanh --- audioop sẽ giúp bạn với điều này (xem ratecv, tomono/tostereo, lin2lin và thiên vị)

+0

Sẽ không 16kHz 16bit mono là 16.000 byte dữ liệu? (và 32.000 byte nếu nó là âm thanh nổi?) – elias

+0

Ah, nvm, tôi hiểu rồi! 16 bit == 2 byte. Sau đó, 2 byte * 16 mẫu/giây == 32.000 byte/giây. – elias

4

Thanx rất nhiều Tôi đã có thể thực hiện những việc sau:

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

Bạn có thể sử dụng PySoundFile để mở các tập tin như một mảng NumPy và chơi nó với python-sounddevice.

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) 

Bạn có thể sử dụng lập chỉ mục trên mảng NumPy để chọn một phần nhất định của dữ liệu âm thanh.

Các vấn đề liên quan