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

от admin

Python. Используем PyAudio для записи звука

В этой публикации мы расмотрим как при помощи библиотеки PyAudio записать звук из любого источника, будь то микрофон, микшер или что-то еще. Перед началом работы надо установить библиотеку , для разных ОС существуют разные способы установки:

Работа с PyAudio

PyAudio — это библиотека предоставляет возможность записи аудио(звука) с помощью Python. PyAudio записывает полученный аудио поток в объекты типа bytes. В последующем данные могут быть сохранены в виде файлов WAV с использованием таких библиотек как scipy или wave соответственно. Для того что бы записать звук например с микрофона, нам надо определить идентификатор используемого устройства, в нашем случае микрофона.

Для этого нам надо написать следующий код, который выведет нам весь список доступных устройств и их идентификаторы:

после запуска скрипта мы получим список всех устройств и их идентификаторы:

В полученном списке мы ищем запись "Микрофон" и определяем его идентификатор, который равен 2. Далее этот идентификатор мы будем использовать в настроках PyAudio. Прежде чем использовать библиотеку 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

Как будет работать запись: для начала надо будет инициализовать поток PyAudio через параметры. Далее в цикле будем записывать кусками данные в массив, после того как закончиться запись мы запишем все данные в файл.

Пример кода

Пример кода для записи звука:

после выполнения скрипта мы получим wav файл который можно открыть в любом плеере.

Запись аудиофайла в массив байтов

Запись байтов в массив char
Есть переменная типа char ch как можно записать туда числа в таком порядке в какой я хочу, у меня.

Запись звука в массив байтов
Если в кратце, то. то мне нужно получить байты с микрофона и записать из в массив/байтов. Я уже.

Как звуковую волну перегнать из аудиофайла в массив?
Всем привет! У меня такая задачка( не знаю с чего начать): Есть аудиозапись с речью. Нужно.

Получить массив байтов из int32_t
Собственно сабж! Самое элегантное решение, но как мне кажется не совсем безопасное это что-то.

огромное спасибо! буду разбираться)

Добавлено через 25 минут

Сообщение от soon

вот такие ошибки получаются:
IntelliSense: невозможно вывести тип "авто" (требуется инициализатор)
IntelliSense: для ссылки переменная "it" требуется инициализатор
IntelliSense: требуется выражение

может не хватает каких библиотек??

Версия компилятора? Есть подозрение, что он не поддерживает range-based-for

Можете заменить на

soon, вообщемто очень дорогостоящая реализация — допустим файл mp3 5Мб — это 5 * 1024 * 1024 объектов std::bitset — конечно современный комьютер все вытерпит..

Flamе, попробуйте

Сообщение от soon

Версия компилятора? Есть подозрение, что он не поддерживает range-based-for

Можете заменить на

alex_x_x, а разве не 5 * 1024 * 128?

В общем-то да, многовато. Хотя без вывода у меня работает меньше секунды, а с выводом

Сообщение от alex_x_x

Загрузка файла в массив байтов
не подскажите как можно загрузить файл и сохранить его не в файл на пк, а в переменную байтов? т.е.

Перевод массива символов в массив байтов
Допустим читаем из txt набор символов 4e5he56R8G потом превращаем его в байты, таким образом. Два.

Как правильно объявить массив байтов?
Как правильно объявить массив байтов? Надо ли вручную выставлять ему размер после "GetBitmapBits".

Можно ли заполнить массив байтов используя оператор ‘<< ‘ ?
Всем здравствуйте. Есть буфер для приёма байтов, заполняющийся в процессе работы программы.

Преобразование wav файла в массив

Всем привет. Нужно выполнить DFT преобразование wav-файла. Функция имеется, графики строятся(по числовым данным), не понимаю как вытащить данные из wav файла чтобы обработать их. Все вышеописанное реализовано в Qt. Сам Qt не знаю толком, изучаю впопыхах. Помогите реализовать функцию «вытаскивающую» данные из wav файла для построения графика/спектра.

Сначало надо определить формат файла, частоту, битность и количество каналов.

Если PCM — то всё просто. Например для 16 бит, 44кГц стерео:

пропускаешь заголовок файла, потом двигаешь указатель по 32 бита, 16 с однгого канала, 16 с другого. секундный буфер это 44000 раз так передвинуть указатель. Закидываешь это в моно. Например можно проигнорировать второй канал. Я по какойто формуле миксовал 2 канала вместе.

Для моно звука сишным преобразованием типа (int16 *) получаешь данные для формулы DFT.

Если там adpcm, mp3, ac3 или ещё что, то надо протажить это через кодек. Библииотека phonon или vlc поможет.

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

.

  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 — там можно получить биты.

Похожие публикации