Python открытый файл необработанных аудиоданных - PullRequest
7 голосов
/ 05 июня 2009

У меня есть эти файлы с расширением ".adc". Это просто необработанные файлы данных. Я могу открыть их с помощью Audacity, используя File-> Import-> Raw data с кодировкой «Signed 16 bit» и частотой дискретизации «16000 кГц».

Я хотел бы сделать то же самое с питоном. Я думаю, что модуль audioop - это то, что мне нужно, но я не могу найти примеры того, как использовать его для чего-то такого простого.

Основная цель - открыть файл и воспроизвести определенное место в файле, например, от второго 10 до второго 20. Есть ли что-то для моей задачи?

Спасибо заранее.

Ответы [ 3 ]

8 голосов
/ 05 июня 2009

Для открытия файла вам просто нужно file(). Для поиска местоположения вам не нужен audioop: вам просто нужно преобразовать секунды в байты и получить необходимые байты файла. Например, если ваш файл 16 бит 16 кГц моно, каждая секунда составляет 32 000 байтов данных. Таким образом, 10-я секунда составляет 320 КБ в файл. Просто найдите нужное место в файле и затем прочитайте соответствующее количество байтов.

И audioop не может помочь вам с самой сложной частью, а именно с воспроизведением аудио. Правильный способ сделать это во многом зависит от вашей ОС.

РЕДАКТИРОВАТЬ: Извините, я только что заметил ваше имя пользователя "thelinuxer". Рассмотрим pyAO для воспроизведения звука из Python в Linux. Вам, вероятно, потребуется изменить формат семпла, чтобы воспроизвести аудио. Audioop поможет вам в этом (см. Ratecv, tomono / tostereo, lin2lin и bias)

4 голосов
/ 05 июня 2009

Большое спасибо, я смог сделать следующее:

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)
2 голосов
/ 16 сентября 2015

Вы можете использовать PySoundFile , чтобы открыть файл в виде массива NumPy и воспроизвести его с помощью 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)

Вы можете использовать индексирование в массиве NumPy для выбора определенной части аудиоданных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...