Аудио сигнал в массив чем записать

Работа с PyAudio
- format — размер семпла и его формат (pyaudio.paInt16, pyaudio.paInt24, pyaudio.paInt8)
- channels — кол-во каналов аудио (обычно 2)
- frames_per_buffer — размер буффера записи
- rate — частота дискритизации 96000, 44100, 22050, 11025, 8000
- input_device_index — идентификатор устройства
- input — вывод True или False
Как преобразовать аудио в массив в python?
- Вопрос задан более года назад
- 1089 просмотров
- Вконтакте

- Вконтакте



- Компьютер со звуковой картой, имеющей линейный вход. Line-in вход, как правило, синего цвета, и присутствует на любом домашнем ПК.

- Кассетный магнитофон или музыкальный центр с кассетной декой. Если у вас такого нет, у кого-то из знакомых наверняка ещё остался.

- Звуковой кабель AUX. С одной стороны — 3,5 мм аудио-разъём (mini-jack), а со второй — 2 RCA («тюльпаны», композитные, «колокольчики», AV-разъёмы). Спросите в магазине «миниджек на два тюльпана» — вас поймут

- Ищем на магнитофоне/музыкольном центре «Line out» выходы, подключаем к ним тюльпаны.

- Другой стороной втыкаем кабель в линейный вход звуковой карты нашего компьютера. Напомню, обычно он синего цвета.

Как прочитать данные из файла WAV в массив
Мне нужно получить все образцы wav файла в массив (или два, если вам нужно сделать это, чтобы сохранить стерео), чтобы я мог применить к ним некоторые изменения. Мне было интересно, легко ли это сделать (желательно без внешних библиотек). У меня нет опыта чтения в звуковых файлах, поэтому я мало знаю об этом.
7 ответов
Файлы WAV (по крайней мере, несжатые) довольно просты. Там заголовок, затем данные следуют за ним.
Этот код должен сделать трюк. Он преобразует волновой файл в нормализованный двойной массив (от -1 до 1), но он должен быть тривиальным, чтобы вместо него сделать int/short array (удалить бит /32768.0 и добавить 32768 вместо этого). Массив right[] будет установлен равным null, если найденный wav файл будет моно.
Я не могу утверждать, что он полностью пуленепробиваемый (потенциальные ошибки «один за другим» ), но после создания массива выборок 65536 и создания волны от -1 до 1 ни один из образцов, похоже, не переходит «через», потолок или пол.
Предполагая, что ваш WAV файл содержит 16-битный PCM (который является наиболее распространенным), вы можете использовать NAudio, чтобы прочитать его в массив байтов, а затем скопируйте его в массив из 16-битных целых чисел для удобства. Если это стерео, образцы будут чередоваться влево, вправо.
Я знаю, что вы хотели избежать сторонних библиотек, но если вы хотите быть уверенным, что справляетесь с WAV файлами с дополнительными фрагментами, я предлагаю избегать таких подходов, как просто поиск 44 байта в файл.
В момент написания никто не обращался к 32-битным или 64-битным кодированным WAV.
Следующий код обрабатывает 16/32/64 бит и моно/стерео:
http://hourlyapps.blogspot.com/2008/07/open-source-wave-graph-c-net-control.html
Здесь находится элемент управления, отображающий спектр Wav файла, который также обслуживает байт [] декодированного Wav File, в котором вы можете играть и/или изменять свои значения.
Просто загрузите элемент управления, и это очень хорошо подходит для работы с файлами WAV.
Преобразование wav файла в массив
Всем привет. Нужно выполнить DFT преобразование wav-файла. Функция имеется, графики строятся(по числовым данным), не понимаю как вытащить данные из wav файла чтобы обработать их. Все вышеописанное реализовано в Qt. Сам Qt не знаю толком, изучаю впопыхах. Помогите реализовать функцию «вытаскивающую» данные из wav файла для построения графика/спектра.
Сначало надо определить формат файла, частоту, битность и количество каналов.
Если PCM — то всё просто. Например для 16 бит, 44кГц стерео:
пропускаешь заголовок файла, потом двигаешь указатель по 32 бита, 16 с однгого канала, 16 с другого. секундный буфер это 44000 раз так передвинуть указатель. Закидываешь это в моно. Например можно проигнорировать второй канал. Я по какойто формуле миксовал 2 канала вместе.
Для моно звука сишным преобразованием типа (int16 *) получаешь данные для формулы DFT.
Если там adpcm, mp3, ac3 или ещё что, то надо протажить это через кодек. Библииотека phonon или vlc поможет.
Как преобразовать аудио в массив в python?
Добрый день. У меня есть аудиофайл, который нужно представить в виде массива чисел. Не могу найти решение на python.
Аудиофайл — массив — аудиофайл.
- Вопрос задан более двух лет назад
- 1856 просмотров
- Вконтакте

Мало данных. Если ваш аудиофайл в WAV формате, то это уже фактически массив данных, который вам нужен. Достаточно отрезать от него «шапку», посмотреть в шапке битрейт и число каналов и соответственно интерпретировать как массив сэмплов нужной битности.
Если файл закодирован кодеком (mp3, ogg, и т.д.), то сперва надо декодировать файл, а потом уже смотри, как говорится, первый пункт.
Как именно это будет выгядеть в коде зависит от того, какой формат, какие библиотеки для работы с массивами анных используете. Конкретизируйте, пожалуйста.
Это три перые ссылки в гугле. Если вы это найти не смогли, то прочь из профессии.
- Вконтакте
Вот именно как сделать
«отрезать от него «шапку», посмотреть в шапке битрейт и число каналов и соответственно интерпретировать как массив сэмплов нужной битности.»

Это три перые ссылки в гугле. Если вы это найти не смогли, то прочь из профессии.

Если ты хочешь работать со звуком — то свой mp3 (или любой другой сжатый формат) надо вначале перевести в wav.
А дальше для работы со звуком есть библиотека wave — там можно получить биты.