Читать wav-file

Обсуждение вопросов, связанных с обработкой аудио и видео информации
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Читать wav-file

Сообщение mikhailefimov »

Здравствуйте!
Не судите строго за вопрос, похожий обсуждался вот здесь http://www.labviewportal.org/viewtopic. ... 0%B9%D0%BB
Я там задавал вопрос, но автор ветки не ответил.
Моя задача - читать wav файл, где-то минутной длины, выводить данные на гониометр, а так же в два текстовых файла, для осей Х и У. Сейчас это не работает так как надо по причине того, что в определенный момент не хватает памяти. Понимаю, что делаю что-то не так, но опыта пока очень мало!
Так же, может кто-либо натолкнуть на мысль, как это можно вывести на Distribution Graph или Polar Plot? Объясню конечную задачу: на микрофоны искусственной головы с акустических систем приходит сигнал, мы его записываем. Так же мы имеем эталонный сигнал, который собственно и воспроизводим при записи. Задача - сравнить пространственную картину с помощью гониометра. Точки при воспроизведении попадают в одни области чаще, чем в другие. Я хочу разбить диаграмму на сектора и закрашивать их сильнее или слабее в момент попадания в них точек. Далее сравнить сектора эталона и испытуемого сигнала.
Мой товарищ по аспирантуре порекомендовал мне попробовать LabView. Раньше пытался совместно с программистом на С++ это выписать, могу показать исходный код.
Помогите, пожалуйста!
For_1.vi
(101.33 КБ) 241 скачивание
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Читать wav-file

Сообщение IvanLis »

mikhailefimov писал(а):Моя задача - читать wav файл, где-то минутной длины, выводить данные на гониометр, а так же в два текстовых файла, для осей Х и У. Сейчас это не работает так как надо по причине того, что в определенный момент не хватает памяти. Понимаю, что делаю что-то не так, но опыта пока очень мало!
По поводу обработки, ничего сказать не могу, так как даже ее идеи не смог уловить.

Что касается загрузки данных, то все должно работать.
У Вас в цикле чтение, непонятно для чего. Программа не доделана, по этому не могу запустить, но переполнение памяти наверняка из-за этого.
Попробуйте для начала просто загрузить данные:
For_1 (1).vi
lv2012
(30.84 КБ) 286 скачиваний
А уже потом наворачивать обработку.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Читать wav-file

Сообщение dadreamer »

mikhailefimov
А почему вы в цикле For закрываете refnum на wav-файл? У вас же на следующей итерации ссылка будет недействительна. Закрывайте, как закончите работать с файлом. Также, если со стандартными :vi: ничего не получится, есть OpenG Large File.
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

IvanLis, спасибо за ответ. Загрузил Ваш вариант, но у меня на минутном файле зависло...
dadreamer, я пробовал разные варианты, но не могу пока понять, где мне входить в цикл, где выходить. С риалтаймом все получилось в лучшем виде
goniometer_realtime_04_work.vi
(103.03 КБ) 239 скачиваний
. То есть он слушает, что в него сыграли, потом пишет в файлы. А вот как только я перешел к открытию файла - тут и началось... 10 сек без проблем, больше - уже очень медленно.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Читать wav-file

Сообщение IvanLis »

mikhailefimov писал(а):IvanLis, спасибо за ответ. Загрузил Ваш вариант, но у меня на минутном файле зависло...
А какое значение частоты дискретизации записанного сигнала?
Закиньте минутный файлик, я у себя попробую..
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

IvanLis, 44100/16 положил на Ядиск http://yadi.sk/d/hXCKQKYhEWdYm сюда не грузит, говорит большой файл
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Читать wav-file

Сообщение IvanLis »

mikhailefimov писал(а):44100/16
44100*60*2 = 5292000 отсчетов, комп по идее должен без проблем обрабатывать.
Фай, что Вы выложили имеет 1930680 отсчета на канал, всего 3861360.
Это немного меньше конечно, но не так существенно, у меня загрузка и отрисовка данных занимает примерно 115 мс, при условии 90% загрузки всех ядер :dntknw: .
Без имени.png
system.png
Untitled 1.vi
lv2010
(16.8 КБ) 234 скачивания
Остается выяснить параметры Вашего "ленивого" ПК. Но судя по 12 версии LabVIEW, ему еще далеко до пристарелого возраста.
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

IvanLis, Dell Vostro V131. Это ноут. i3, 2350MHz, 4Gb, win7 64bit
IvanLis писал(а): По поводу обработки, ничего сказать не могу, так как даже ее идеи не смог уловить.
Попробую более понятно написать.
Есть задача - оценить один из параметров качества акустической системы - стереофоничность.
Собираем тракт, где есть например CD-плеер, усилитель и пара акустических систем. Воспроизводим с диска минутный трек, который содержит оценочный эталонный сигнал, назовем его ЭС.
С помощью искусственной головы записываем то, что получилось, назовем это результирующий сигнал РС.

В программе мы открываем ЭС и РС, читая их (то, что мы сейчас и пытаемся делать).
Далее, есть прибор - гониометр, он реализован в моем VI. Принцип работы заключается в следующем: берутся сигналы правого и левого каналов (R и L соответственно), затем из них делается L+R и L-R. Эти сигналы подаются на вертикальные и горизонтальные отклоняющие пластины осцилографа. В моем случае прибор корректно заработал и начал показывать правильные данные при использовании XY Graph.
В идеале мы должны при наложении картинок от ЭС и РС друг на друга видеть разницу, которую потом будем оценивать.

Вот тут у меня и начался затык: в риалтайме я читаю данные прибором, но потом мне нужно их анализировать в минутном фрагменте. В идеале бы иметь возможность то, что прочитано, крутить туда-обратно, наблюдая изменение картинки гониометра в каждую секунду. Это, как я понимаю, какая-то довольно нетривиальная штука с циклами. Сам я не могу допереть, как такое сделать.
Разумеется, я не прошу сделать за меня, просто укажите, где лучше глянуть конкретные примеры? Может быть, кто-либо реализовывал похожие задачи... я на примерах смогу попробовать и потом спрошу, если возникнут проблемы!
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

IvanLis, да, тот VI, что Вы прислали, у меня тоже заработал! Спасибо!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Читать wav-file

Сообщение dadreamer »

Вот ещё один вариант работы с wav-файлами: Audio DataPlugin. Пример использования в :labview: есть здесь, во втором посте. Я немного поразбирался, вся работа выполняется через инструменты File I/O -> Storage/DataPlugin, можно также получить все свойства файла и каждого канала, ну и конечно сами данные в виде графика или массива значений. Но навскидку как-то медленно грузит файл, если использовать Data File Viewer.vi на 1000 значений в таблице и 100000 значений на графике, то ещё терпимо, а если считать весь файл через Read Data, то долго. Хотя никто не мешает читать, скажем, по тысяче точек на каждой итерации и обрабатывать их. Через Get Properties это реализуется и вроде бы работает быстрее. Но субъективно чувствуется, что пример IvanLis быстрее, у меня время выполнения - 60 мс при втором и последующих запусках.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Читать wav-file

Сообщение IvanLis »

mikhailefimov писал(а):В идеале мы должны при наложении картинок от ЭС и РС друг на друга видеть разницу, которую потом будем оценивать.
Вроде сложного ничего нет.
1. захватываем сигнал длиной 44100 отсчетов (1 сек)
2. сравниваем с эталоном и запоминаем разницу (по идее за 1 сек до следующей партии отсчетов можно успеть обработать)
3. ждем следующей партии данных и переходим к п.1

по окончании 1 мин. у нас будет 60 "разниц"
можно будет их просматривать и крутить

У меня следующий вопрос: каким образом Вы разницу вычисляете?
Для этого необходимо определить метрическое пространство между "козибоберами" отображаемыми на графиках.
Тем более если речь идет о аспирантуре, тут все должно быть доказуемо. А для этого этого Вам необходимо доказать выполнение трех свойств метрического пространства:
- тождества
- симметрии
- треугольника
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

dadreamer, попробую обязательно! Спасибо!
IvanLis писал(а): У меня следующий вопрос: каким образом Вы разницу вычисляете?
Для этого необходимо определить метрическое пространство между "козибоберами" отображаемыми на графиках.
Тем более если речь идет о аспирантуре, тут все должно быть доказуемо. А для этого этого Вам необходимо доказать выполнение трех свойств метрического пространства:
- тождества
- симметрии
- треугольника
Для этого я предполагал использовать сектора. Берем окружность, делим ее на какое-то количество секторов и смотрим, в какой сектор попал сигнал в ЭС и в какой - в РС. Если в разные - делаем вывод, что испытуемый тракт вносит пространственные искажения. В чем они выражаются, какая необходима разрешающая способность (количество секторов) и прочие сопутствующие вопросы - пока не могу сказать. Может быть, это вообще не сработает :dntknw: нужен эксперимент.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Читать wav-file

Сообщение dadreamer »

mikhailefimov писал(а):dadreamer, попробую обязательно! Спасибо!
Только учтите, что имя плагина для запуска :vi: будет Audio (по кр. мере у меня оно такое, а не как в примере). Ещё я подумал, что через OpenG будет сложновато прочитать wav-файл, т.к. чтение в бинарном режиме, а у wav есть заголовок и только после него идут данные. Так что тут налицо лишняя работа по парсингу и анализу. Хотя, если время есть, можете попробовать.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Читать wav-file

Сообщение IvanLis »

mikhailefimov писал(а):В чем они выражаются, какая необходима разрешающая способность (количество секторов) и прочие сопутствующие вопросы - пока не могу сказать. Может быть, это вообще не сработает :dntknw: нужен эксперимент.
Я бы начал с вычисления коэф. корреляции между спектрами принятого и эталонного сигналов.
Но начинать всегда сложно, удачи Вам.
mikhailefimov
beginner
beginner
Сообщения: 19
Зарегистрирован: 05 ноя 2013, 19:42
Версия LabVIEW: 2012
Откуда: Санкт-Петербург
Контактная информация:

Re: Читать wav-file

Сообщение mikhailefimov »

dadreamer, IvanLis, спасибо!
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Работа с графикой и звуком»