Python преобразование звукового сигнала в массив чисел
Задача такая: Идет проигрывание файла ‘audio.mp3’ Необходимо выходной сигнал представить как массив чисел[10, 32, 43, 54, 65, 76, 87, 98, 32, 31] Этот массив будет передаваться в соответствующую функцию каждые 0.1 сек.
Отслеживать
задан 30 мая 2020 в 10:32
67 6 6 бронзовых знаков
Не совсем понятна суть вопроса, но гляньте datareview.info/article/… может чем поможет.
30 мая 2020 в 10:46
Думаю, мне это поможет. Благодарю
30 мая 2020 в 11:07
Можно закрывать тему.. Я сделал другое решение..
31 мая 2020 в 11:05
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- python
- массивы
- аудио
- signal
Документация
Запишите и проигрывайте аудиоданные для обработки в MATLAB ® от аудиовхода и устройств вывода в вашей системе. С R2020b воспроизведение звука поддерживается в MATLAB Online™ .
- Аудио записи
- Проигрывание аудио
- Запись или воспроизведение аудио с помощью функций
Аудио записи
Данные записи из устройства аудиовхода, такого как микрофон, соединенный с вашей системой:
- Создайте audiorecorder объект.
- Вызовите record или recordblocking метод, где:
- record возвращает мгновенное управление в функцию вызова или командную строку даже во время записи. Задайте продолжительность записи в секундах или закончите запись stop метод. Опционально, вызовите pause и resume методы. Запись выполняется асинхронно.
- recordblocking сохраняет контроль, пока запись не завершена. Задайте продолжительность записи в секундах. Запись выполняется синхронно.
Следующие примеры показывают, как использовать recordblocking и record методы.
Вход микрофона записи
В этом примере показано, как записать вход микрофона, воспроизведите запись и сохраните записанный звуковой сигнал в числовом массиве. Необходимо сначала соединить микрофон с системой.
Создайте audiorecorder возразите названному recObj для записи аудиовхода.
recObj = audiorecorder
recObj = audiorecorder with properties: SampleRate: 8000 BitsPerSample: 8 NumChannels: 1 DeviceID: -1 CurrentSample: 1 TotalSamples: 0 Running: 'off' StartFcn: [] StopFcn: [] TimerFcn: [] TimerPeriod: 0.0500 Tag: '' UserData: [] Type: 'audiorecorder'
audiorecorder создает 8 000 Гц, 8-битный, одноканальный audiorecorder объект.
Запишите свою речь в течение 5 секунд.
disp('Start speaking.') recordblocking(recObj, 5); disp('End of Recording.');
play(recObj);
Храните данные в массиве с двойной точностью, y .
y = getaudiodata(recObj);
plot(y);
Запись двух каналов с различных звуковых карт
Записывать аудио независимо с двух различных звуковых карт, с микрофоном, соединенным с каждым:
- Вызовите audiodevinfo перечислять доступные карты звуков. Например, этот код возвращает массив структур, содержащий все аудио устройства ввода и вывода в вашей системе:
info = audiodevinfo;
recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
record(recorder1); record(recorder2); pause(5);
stop(recorder1); stop(recorder2);
Определение качества записи
По умолчанию, audiorecorder возразите использует частоту дискретизации 8 000 герц, глубину 8 битов (8 битов за выборку) и один звуковой канал. Эти настройки минимизируют необходимое количество хранения данных. Для более высоких качественных записей увеличьте частоту дискретизации или битовую глубину.
Например, типичные компакт-диски используют частоту дискретизации 44 100 герц и 16-битную глубину. Создайте audiorecorder возразите, чтобы записать в стерео (два канала) с теми настройками:
myRecObj = audiorecorder(44100, 16, 2);
Для получения дополнительной информации о доступных свойствах и значениях, смотрите audiorecorder страница с описанием.
Проигрывание аудио
После того, как вы импортируете или запишете аудио, MATLAB поддерживает несколько способов слушать данные:
- Для простого воспроизведения с помощью одного вызова функции использовать sound или soundsc . Например, загрузите демонстрационный MAT-файл, который содержит сигнал и данные о частоте дискретизации, и слушайте аудио:
load chirp.mat; sound(y, Fs);
load gong.mat; gong = audioplayer(y, Fs); play(gong);
Если вы не задаете частоту дискретизации, sound воспроизводит на уровне 8 192 герц. Для любого воспроизведения задайте меньшие частоты дискретизации, чтобы воспроизводить более медленно, и большие частоты дискретизации, чтобы воспроизвести более быстро.
Примечание
Большинство звуковых карт поддерживает частоты дискретизации приблизительно между 5,000 и 48 000 герц. Определение частот дискретизации вне этой области значений может привести к неожиданным результатам.
Запись или воспроизведение аудио с помощью функций
Если вы создаете audioplayer или audiorecorder возразите в функции, объект существует только на время функции. Например, создайте функцию проигрывателя , вызванную playFile и простая функция обратного вызова showSeconds :
function playFile(myfile) load(myfile); obj = audioplayer(y, Fs); obj.TimerFcn = 'showSeconds'; obj.TimerPeriod = 1; play(obj); end function showSeconds disp('tick') end
Вызовите playFile от командной строки, чтобы проигрывать файл handel.mat :
playFile('handel.mat')
На уровне записанной частоты дискретизации 8 192 выборок в секунду, проигрывая эти 73 113 выборок в файле занимает приблизительно 8,9 секунд. Однако playFile функционируйте обычно заканчивается, прежде чем воспроизведение завершается и очищает audioplayer объект obj .
Чтобы гарантировать полное воспроизведение или запись, рассмотрите следующие возможности:
- Используйте playblocking или recordblocking вместо play или record . Методы блокирования сохраняют контроль до проигрывания, или запись завершается. Если вы блокируете управление, вы не можете дать никакие другие команды или методы (такие как pause или resume ) во время воспроизведения или записи.
- Задайте выходной аргумент для своей функции, которая генерирует объект в базовом рабочем пространстве. Например, измените playFile функция, чтобы включать выходной аргумент:
function obj = playFile(myfile)
Вызовите функцию:
h = playFile('handel.mat');
Поскольку h существует в базовом рабочем пространстве, можно приостановить воспроизведение от командной строки:
pause(h)
Смотрите также
Похожие темы
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
getaudiodata
y = getaudiodata( recorder ) возвращает зарегистрированные аудиоданные, сопоставленные с объектом audiorecorder recorder в массиве double y .
y = getaudiodata( recorder , dataType ) преобразовывает данные сигнала в заданный тип данных.
Примеры
Получите данные из объекта магнитофона
Создайте запись с помощью объекта audiorecorder и затем получите звуковой сигнал как числовой массив различных типов данных.
Создайте объект audiorecorder и запишите пять вторых аудиоклипов от своего микрофона.
recObj = audiorecorder; disp('Start speaking.')
Start speaking.
recordblocking(recObj,5); disp('End of Recording.');
End of Recording.
Получите звуковой сигнал как массив double и отобразите данные на графике.
doubleArray = getaudiodata(recObj); plot(doubleArray); title('Audio Signal (double)');
Получите звуковой сигнал как массив int8 и отобразите данные на графике. На основе заданного типа данных тот же звуковой сигнал возвращен с различной областью значений значений. В этом случае значения в массиве int8 могут охватить между -128 и 127 .
int8Array = getaudiodata(recObj,'int8'); plot(int8Array); title('Audio Signal (int8)');
Входные параметры
recorder — Объект магнитофона
Объект audiorecorder
Объект магнитофона, заданный как объект audiorecorder . Используйте функцию audiorecorder , чтобы создать объект.
тип данных Тип данных
‘double’ (значение по умолчанию) | ‘single’ | ‘int16’ | ‘int8’ | ‘uint8’
Тип данных выходного звукового сигнала, заданного как одно из этих значений: ‘double’ , ‘single’ , ‘int16’ , ‘int8’ или ‘uint8’ .
Типы данных: char | string
Выходные аргументы
y Данные о звуковом сигнале
числовой массив
Данные о звуковом сигнале, возвращенные как числовой массив.
Количество столбцов в y зависит от количества каналов в записи: один для моно и два для стерео.
Диапазон значений y зависит от заданного dataType .
Демонстрационный диапазон значений
— От 32768 до 32 767
Смотрите также
Темы
- Запись и проигрывание аудио
- Поддерживаемые форматы видео и форматы аудиофайла
Представленный в R2006a
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2019 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
NAudio. Как записать звук в массив байтов?
NAudio: записать звук с выходного устройства
Здравствуйте! Пытаюсь записать звук с колонок средствами NAudio, но записывать получается только с.
Как записать весь в текст боксе в массив байтов?
пишу в текст бокст это 00 03 01 00 00 0C как сделать что б он записал в по 2 цифры в каждый.
Как можно записать файл больше 8ГБ в массив байтов?
Здравствуйте,подскажите, пожалуйста, как можно записать файл больше 8ГБ в массив байтов?
Необходимо файл (любого расширения) записать в базу данных как массив байтов
Необходимо файл (любого расширения) записать в базу данных в byte форме. И затем взять его (выбрав.
Регистрация: 26.04.2017
Сообщений: 14
Доброго дня. Есть такой вариант (необходимо допиливать; сам упражняюсь):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
//--Код чтения байт из файла OpenFileDialog open = new OpenFileDialog(); open.Filter = "Wave File (*.wav)|*.wav;"; if (open.ShowDialog() != DialogResult.OK) return; NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName)); int size = 4096; int bytes = 4; //--Массив для хранения байт, составляющих сигнал byte[] buffer = new byte[size]; //--Массив для хранения значений амплитуд сигнала double[] amps = new double[size / bytes]; while(wave.Position wave.Length) { //--Запись байт в массив wave.Read(buffer, 0, size); for (int i = 0; i read / bytes; i++) { //--Получить значения амплитуд сигнала amps[i] = BitConverter.ToSingle(buffer, i * bytes); } }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Записать массив байтов с микрофона
Всем привет! Возникла проблема, никак не могу придумать такую штуку, допустим, имеется небольшое.
Массив байтов записать в файл
Вообщем экспериментирую с шифрованием. Беру к примеру файл размером 33*663 байт. Этот файл.
Считать по 4 байта и записать в массив байтов
есть какой то TcpClient который отправляет данные на сервак мне нужно эти данные на сервере.
Поблочно записать массив байтов в файл
Есть массив байтов размером 256 КБ. Нужно записать его поблочно в файл(повторить 10 раз, размер.
Массив байтов записать в нетипизированый бинарный файл
Скажите как работать с бинарными файлами в си, а именно есть массив байтов: char; //в нем.
Считать файл и записать данные в массив байтов
Хочу создать класс который считывает файл и записывает данные в массив байтов. Есть следующий код.
Или воспользуйтесь поиском по форуму: