Аудио сигнал в массив чем записать
Перейти к содержимому

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

  • автор:

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

.

Работа с 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 просмотров
  • Facebook
  • Вконтакте
  • Twitter

trapwalker

  • Facebook
  • Вконтакте
  • Twitter

trapwalker

solotony

Запись звука с линейного входа компьютера

  1. Компьютер со звуковой картой, имеющей линейный вход. Line-in вход, как правило, синего цвета, и присутствует на любом домашнем ПК.
    Линейный вход звуковой карты
  2. Кассетный магнитофон или музыкальный центр с кассетной декой. Если у вас такого нет, у кого-то из знакомых наверняка ещё остался.
    музыкальный центр оцифровка
  3. Звуковой кабель AUX. С одной стороны — 3,5 мм аудио-разъём (mini-jack), а со второй — 2 RCA («тюльпаны», композитные, «колокольчики», AV-разъёмы). Спросите в магазине «миниджек на два тюльпана» — вас поймут
    3.5 mini-jack - 2 rca тюльпана
  1. Ищем на магнитофоне/музыкольном центре «Line out» выходы, подключаем к ним тюльпаны.
    линейный выход музыкального центра
  2. Другой стороной втыкаем кабель в линейный вход звуковой карты нашего компьютера. Напомню, обычно он синего цвета.
    Линейный вход подключение

Как прочитать данные из файла 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 просмотров
  • Facebook
  • Вконтакте
  • Twitter

trapwalker

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

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

  • Facebook
  • Вконтакте
  • Twitter

Вот именно как сделать

«отрезать от него «шапку», посмотреть в шапке битрейт и число каналов и соответственно интерпретировать как массив сэмплов нужной битности.»

trapwalker

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

solotony

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

А дальше для работы со звуком есть библиотека wave — там можно получить биты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *