7

I have these files with the extension ".adc". They are simply raw data files. I can open them with Audacity using File->Import->Raw data with encoding "Signed 16 bit" and sample rate "16000 Khz".

I would like to do the same with python. I think that audioop module is what I need, but I can't seem to find examples on how to use it for something that simple.

The main goal is to open the file and play a certain location in the file, for example from the second 10 to the second 20. Is there something out there for my task ?

Thanx in advance.

3 Answers 3

8

For opening the file, you just need file(). For finding a location, you don't need audioop: you just need to convert seconds to bytes and get the required bytes of the file. For instance, if your file is 16 kHz 16bit mono, each second is 32,000 bytes of data. So the 10th second is 320kB into the file. Just seek to the appropriate place in the file and then read the appropriate number of bytes.

And audioop can't help you with the hardest part: namely, playing the audio. The correct way to do this very much depends on your OS.

EDIT: Sorry, I just noticed your username is "thelinuxer". Consider pyAO for playing audio from Python on Linux. You will probably need to change the sample format to play the audio---audioop will help you with this (see ratecv, tomono/tostereo, lin2lin, and bias)

Sign up to request clarification or add additional context in comments.

2 Comments

Wouldn't 16kHz 16bit mono be 16,000 bytes of data? (and 32,000 bytes if it were stereo?)
Ah, nvm, I get it! 16 bit == 2 bytes. Then, 2 bytes * 16 samples / second == 32,000 bytes / second.
4

Thanx a lot I was able to do the following:

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)

Comments

3

You can use PySoundFile to open the file as a NumPy array and play it with 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)

You can use indexing on the NumPy array to select a certain part of the audio data.

1 Comment

tried using it with raw audio strea, getting " error in level argument Invalid file: bytearray(b'\xd8\x04\xb8\x05h\x06\xc8\x068\x07x\x07\xb8\x06\xb8\x05\xb8\x05\xc8\x06\xc8\x06h\x06H\x06\xd8\x05\x98\x04\xd8\x03@\x03x\x02\x90\x02p\x030\x04\xf0\x03\xa0... " any ides how to fixit ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.