Как редактировать необработанные аудиоданные PCM без аудиобиблиотеки? - PullRequest
8 голосов
/ 08 мая 2009

Меня интересует точное извлечение частей файла WAV PCM вплоть до уровня семпла. Кажется, что большинство аудиомодулей полагаются на специфичные для платформы аудио-библиотеки. Я хочу сделать это кроссплатформенным, и скорость не проблема, есть ли какие-нибудь нативные аудио модули Python, которые могут это сделать?

Если нет, мне придется интерпретировать двоичный файл PCM. Хотя я уверен, что могу довольно легко разобрать спецификации PCM, а необработанные форматы достаточно просты, но я никогда раньше не имел дело с двоичными данными в Python. Есть ли хорошие ресурсы, которые объясняют, как это сделать? Конкретно относящийся к аудио будет просто глазурью.

Ответы [ 5 ]

6 голосов
/ 08 мая 2009

Я читаю вопрос и ответы и чувствую, что, должно быть, упускаю что-то совершенно очевидное, потому что никто не упомянул следующие два модуля:

  • audioop : управление необработанными аудиоданными
  • wave : чтение и запись файлов WAV

Возможно, я из параллельной вселенной, и машина времени Гвидо на самом деле является машиной пространства-времени:)

Если вам нужен пример кода, не стесняйтесь спрашивать.

PS Предполагая частоту дискретизации 48 кГц, видеокадр с частотой 24 / 1.001 == 23,976023976… кадр / с имеет длину 2002 отсчетов аудио, а при 25 кадрах / с - 1920 отсчетов аудиосигналов.

5 голосов
/ 08 мая 2009

Я только написал PCM-ридер на C ++ и Java, но сам формат довольно прост. Достойное описание можно найти здесь: http://ccrma.stanford.edu/courses/422/projects/WaveFormat/

В прошлом вы могли просто прочитать его (чтение двоичного файла, http://www.johnny -lin.com / cdat_tips / tips_fileio / bin_array.html ) и просто работать с полученным массивом. Возможно, вам придется использовать какое-то битовое смещение, чтобы получить правильное выравнивание (https://docs.python.org/reference/expressions.html#shifting-operations), но в зависимости от того, как вы его читаете, вам может не понадобиться.

Все это говорит, что я все еще склоняюсь к подходу Дэвида.

1 голос
/ 08 мая 2009

Похоже на сочетание open (..., "rb"), struct module и некоторых подробностей о формате файла wav / riff (вероятно, лучше обратиться туда ) сделает работу.

Просто любопытно, что вы собираетесь делать с необработанными образцами данных?

1 голос
/ 08 мая 2009

Действительно ли важно, чтобы ваше решение было чистым Python, или вы согласились бы с тем, что может работать с нативными звуковыми библиотеками на разных платформах (так что оно эффективно кроссплатформенное)? Есть несколько примеров последнего в http://wiki.python.org/moin/PythonInMusic

0 голосов
/ 28 июля 2015

Я искал это и нашел это: http://www.swharden.com/blog/2009-06-19-reading-pcm-audio-with-python/ Требуется Numpy (и matplotlib, если вы хотите построить график)

import numpy
data = numpy.memmap("test.pcm", dtype='h', mode='r')
print "VALUES:",data

Посетите сайт автора для получения более подробной информации.

...